当前位置: 首页 > article >正文

【rust】rust基础代码案例

文章目录

  • 代码篇
    • HelloWorld
    • 斐波那契数列
    • 计算表达式(加减乘除)
    • web接口
  • 优化篇
    • target/目录占用一个g,仅仅一个actix的helloWorld demo
    • 升级rust版本, 通过rustup
    • cargo换源
    • windows下放弃吧,需要额外安装1g的toolchain并且要配合msvc(10g起步吧)或者mingw。

代码篇

HelloWorld

fn main() {
    print!("Hello,Wolrd")
}

斐波那契数列

fn fib(n: u64) -> u64 {
    let mut a = 0;
    let mut b = 1;
    for _ in 0..n {
        let c = a + b;
        a = b;
        b = c;
    }
    a
}

fn main() {
    let n = 10;
    let result_list: Vec<String> = (1..n+1).map(|i| fib(i).to_string()).collect();
    let result = result_list.join(",");
    println!("{}", result);
}

计算表达式(加减乘除)

use std::io;
use std::num::ParseIntError;
fn parse_expression(expression: &str) -> Result<i32, ParseIntError> {
    let mut result = 0;
    let mut current_number = 0;
    let mut operator = '+';

    for token in expression.split_whitespace() {
        match token {
            "+" => operator = '+',
            "-" => operator = '-',
            "*" => operator = '*',
            "/" => operator = '/',
            _ => {
                current_number = match token.parse::<i32>() {
                    Ok(num) => num,
                    Err(e) => return Err(e),
                };
                match operator {
                    '+' => result += current_number,
                    '-' => result -= current_number,
                    '*' => result *= current_number,
                    '/' => result /= current_number,
                    _ => {},
                }
            }
        }
    }

    Ok(result)
}
fn main() {
    println!("请输入表达式(例如:1 + 2 * 3):");
    let mut input = String::new();
    io::stdin().read_line(&mut input).expect("读取输入失败");
    let expression = input.trim();
    match parse_expression(expression) {
        Ok(result) => println!("计算结果为:{}", result),
        Err(e) => println!("解析表达式时出错:{}", e),
    }
}

web接口

use actix_web::{get, post, web, App, HttpResponse, HttpServer, Responder};

#[get("/")]
async fn hello() -> impl Responder {
    HttpResponse::Ok().body("Hello world!")
}

#[post("/echo")]
async fn echo(req_body: String) -> impl Responder {
    HttpResponse::Ok().body(req_body)
}

async fn manual_hello() -> impl Responder {
    HttpResponse::Ok().body("Hey there!")
}

#[actix_web::main]
async fn main() -> std::io::Result<()> {
    HttpServer::new(|| {
        App::new()
            .service(hello)
            .service(echo)
            .route("/hey", web::get().to(manual_hello))
    })
    .bind(("127.0.0.1", 8080))?
    .run()
    .await
}

优化篇

target/目录占用一个g,仅仅一个actix的helloWorld demo

~/.cargo/config写入, 放到项目之外去,眼不见心不烦

[build]
target-dir = "/path/rust-target"

在这里插入图片描述
不过一个demo 接口, 你执行下cargo run 和 cargo build --release, 就占用1.2g。 这可真烧磁盘, 有node_module那味儿了。

升级rust版本, 通过rustup

export RUSTUP_DIST_SERVER="https://rsproxy.cn"
export RUSTUP_UPDATE_ROOT="https://rsproxy.cn/rustup"
rustup update

cargo换源

~/.cargo/config写入

[source.crates-io]
registry = "https://github.com/rust-lang/crates.io-index"
replace-with = 'ustc'
[source.ustc]
registry = "https://mirrors.ustc.edu.cn/crates.io-index/"

windows下放弃吧,需要额外安装1g的toolchain并且要配合msvc(10g起步吧)或者mingw。

在这里插入图片描述
比linux下的工具链大多了
在这里插入图片描述


http://www.kler.cn/a/383976.html

相关文章:

  • ASP页面改为UTF-8编码后,刷新页面不定时中文输出乱码终极解决方案
  • C++之vector类的模拟实现
  • 线程同步的方法
  • sql报错信息将字符串转换为 uniqueidentifier 时失败
  • OpenAI大事记;GPT到ChatGPT参数量进化
  • 数据管理的四大支柱:揭秘数据中台、数据仓库、数据治理和主数据
  • 仪表板展示|DataEase看中国:历年双十一电商销售数据分析
  • MOE(Mixture of Experts,混合专家)
  • django图书管理系统-计算机毕业设计源码00648
  • 量化研究--年化57%全球动量模型策略回测,学习使用
  • nginx代理 proxy_pass
  • 使用 OpenCV 和 Pyzbar 检测二维码和条码
  • 分享一个游戏源码下载网站
  • TLS协议基本原理与Wireshark分析_wireshark分析tls协议
  • HarmonyOS NEXT 应用开发实战:十一、知乎日报项目接口使用指南
  • 【工具】随机邮件地址生成器
  • RKNN MAC利用率
  • 一七五、HTML 不同类型的事件及其说明和示例
  • std::copy
  • Vue实现登录功能
  • js 两日期天数差、某一日期前推后推固定天数后的日期、时间格式化
  • WPF中的INotifyPropertyChanged接口
  • 蓝桥杯顺子日期(填空题)
  • 论文阅读笔记:Image Processing GNN: Breaking Rigidity in Super-Resolution
  • yakit中的fuzztag
  • Vue3中useRouter 怎么在Vue 组件外使用