← SEARCHABLE ARCHIVE
Rust · 2026-07-14

从 Rust 基础到掌握 — 第 1 集

通过所有权和借用安全地处理内存

INTERACTIVE READING MODE →

该博客上撰写的文章是出于教学目的而创建的。 另外,文章中的信息可能不正确,请谨慎。

Rust 是一种系统编程语言,旨在在没有垃圾收集器的情况下维护内存安全。 当创建性能很重要的程序时,我们尝试在编译阶段减少无效指针和数据竞争。

价值观有主人

Rust 中的值默认有一个所有者。 当所有者超出范围时,值会自动清除。

fn main() {
    let name = String::from("Rose");
    print_name(name);
    //名称的所有权已转移至函数。
}

fn print_name(value: String) {
    println!("{value}");
}

String如果将其作为值传递给函数,所有权就会转移。 如果调用方想继续使用它,它就会借出该值。

通过引用借用值

fn main() {
    let name = String::from("Rose");
    print_name(&name);
    println!("{name}");
}

fn print_name(value: &String) {
    println!("{value}");
}

&String是不具有值且被简要阅读的参考。 更改值&mut String您应该使用这样的可变引用:

阻止您同时创建多个可变引用的规则一开始很棘手。 相反,它可以防止执行期间可能发生的错误内存访问和竞争条件。

将失败的可能性表达为一种类型

Rust 经常使用 Option<T> 表示值可能不存在,并使用 Result<T, E> 表示操作可能失败。

fn divide(a: i32, b: i32) -> Result<i32, String> {
    if b == 0 {
        return Err(String::from("它不能被 0 除。"));
    }
    Ok(a / b)
}

调用代码必须显式处理成功和失败。 Rust 中的安全性还包括使错误难以被忽视。

Rust 项目是cargo new, cargo run, cargo test它使用相同的 Cargo 命令进行管理。 首先,与其尝试记住所有所有权规则,不如创建一个小型命令行程序并按照编译器消息检查借用范围。