安装与测试

可以从官网直接下载。下载rustup-init并运行之后,会打开命令行,选1默认安装,然后不出意外就安装完了。

发生意外也没关系,如果是因为网络不通畅导致的问题,可以在powershell命令行运行rustup-init.exe,但在执行之前,需要输入如下指令,将环境变量更改改为国内源

$ENV:RUSTUP_DIST_SERVER='https://mirrors.ustc.edu.cn/rust-static' 
$ENV:RUSTUP_UPDATE_ROOT='https://mirrors.ustc.edu.cn/rust-static/rustup'

安装完成后按照惯例查看一下版本,不报错就算成功。

rustc --version
// rustc 1.90.0 (1159e78c4 2025-09-14)

然后新建一个文件main.rs

/*此文件为main.rs
单行注释用//,多行注释用/**/
println打印字符串,加上!会自动换行*/
fn main() {
    println!("Hello, world");
}

在命令行中通过rustc编译成可执行文件,就可以运行了。

>rustc main.rs
>main.exe
hello world

变量

rust通过let声明变量,默认情况下,变量的值不可更改;若想要一个可以变的变量,需要用到关键字mut

fn val_test(){
    let a = 1;       //声名一个变量
    // a = 2;        //报错 cannot assign twice to immutable variable
    let mut a_mut = 1;
    println!("a_mut={}", a_mut);  //输出为a_mut=1,{}可把a转为字符串
    a_mut = 2;
    println!("a_mut={}", a_mut);  //输出为a_mut=2
}
fn main(){
    val_test();
}

但Rust是强类型语言,变量不可跨数据类型

let mut a = 1;
a = 1.1;    //报错,整数不能变浮点

a在创建时,尽管未说明类型,但被自动推导为整型,所以无法变成浮点数。Rust中整型包括有符号和无符号两类,每一类都有8, 16, 32, 64和128位五种。例如

let a:u32 = 25;     //a为无符号32位整型

此外,还有isizeusize,将根据计算机架构自动选择32位或者64位。

除了整型之外,还有以下数值类型

  • 浮点类型有32位和64位,用f32, f64表示,默认为64位。
  • 布尔型用bool表示,
  • 字符型用char标识,字符类型长度为4字节。
  • never类型用!表示,即无返回类型,类似于void

条件语句和函数

【fn】用于声明函数,如有传入参数或返回值,都标明数据类型;【if, else】则是宇宙通用的条件语句,在rust中,判断条件无需用括号,但代码段必须用【{}】括起来。根据这两条规则,可以写一个阶乘函数

fn fac(x:i32)->i32{
    if x>1{
        return x*fac(x-1);
    }else{
        return 1;
    }
}

fn main(){
    let x = fac(5);
    println!("5!={}",x);    //测试结果为 5!=120
}

阶乘函数可以写为下面这个更加简化的形式

fn fac(x:i32)->i32{
    if x>1{x*fac(x-1)} else{1}
}

这就显得略酷,在rust中,任何{}包含的程序块,尾行只要是不以分号结尾的表达式,即可作为程序块的返回值。在上述阶乘代码中,将这种规则写成了三元表达式的形式,非常简洁。

下面是一个更加通用的案例,将x的赋值过程,写成了基于程序块的函数

fn test_block(){
    let x ={
        let y=1;
        y+2
    };
    println!("{}",x);       //输出为3
    // println!("{}",y);       //报错
}
fn main(){
    test_block();
}

数组和元组

rust提供了数组和元组这些数据类型,创建方法如下

fn test_arr(){
    let a = [1,2,3];
    println!("{:?}", a);     //[1, 2, 3]
    let b : [i32; 3] = [1,2,3];
    println!("{:?}", b);     //[1, 2, 3]
    let c = 1..3;
    println!("{:?}", c);     //1..3
    let d: (i32, f64, u8) = (500, 6.4, 1);
    println!("{:?}", d);     //(500, 6.4, 1)

}
fn main(){
    test_arr();
}

上述代码中, a a a是最简单的数组,且rust会自动推断其变量类型为整型; b b b的输出和a一致,但其类型为浮点型; c c c是一个Range类型的自然数列,若进行迭代,其内部也为1,2,3; d d d是元组,内部可以存放不同类型的数据。

循环

rust有三种主要的循环,即条件循环【while】;遍历【for】以及死循环【loop】。死循环loop比较简单,只有遇到【break】才会跳出。

while循环示例如下

fn test_while(a:Vec<i32>){
    let mut i = 0;
    while i<3{
        print!("a[{}] = {}; ", i, a[i]);
        i += 1;     //即 i = i+1
    }
}
fn main(){
    let a = vec![1,2,3];
    test_while(a);
}

//输出如下
//a[0] = 1; a[1] = 2; a[2] = 3;

【for】循环只有遍历形式,通过遍历Range,也可以实现循环索引。

fn test_for(a:Vec<i32>){
    for i in &a{
        print!("{} ",i);
    }
    println!("");
    for j in 0..3{
        print!("a[{}] = {}; ", j, a[j]);
    }
}//在mian中调用函数,后不再说明

//输出如下
//1 2 3
//a[0] = 1; a[1] = 2; a[2] = 3;

上述代码中,第一次对a进行遍历的时候,使用了【&a】这种方案,否则在遍历的过程中,会拿走a的所有权,从而下面第二次遍历无法取出a中的值,导致报错。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐