🦀 终极 Rust 编程语言超级教程 🚀

**如果你喜欢这篇文章,请在 YouTube 上订阅我**

🦀 终极 Rust 编程语言超级教程 🚀

本指南旨在让您成为 **Rust 专家** — 无论您是刚入门还是想要深入了解高级功能。我们将涵盖 **Rust 的各个方面**,从最基础的到高级并发、内存管理、Web 开发等等。

🌟 为什么要学习 Rust?

Rust 因其独特的组合而脱颖而出:

  • 无需垃圾收集的内存安全:Rust 在编译时防止空指针取消引用和数据竞争。
  • 高性能:编译为本机代码,使其与 C/C++ 一样快。
  • 并发:保证线程安全,使多线程编程变得轻而易举。
  • 广泛的生态系统:从嵌入式系统到 Web 组装,Rust 用途广泛。
  • 不断壮大的社区:得到 Mozilla、亚马逊和微软等大型组织的支持。
  • 🛠️ 设置 Rust

    安装 Rust

  • 使用 rustup(跨平台安装程序)下载并安装 Rust:
  • curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
  • 将其添加到您的环境中:
  • source $HOME/.cargo/env
  • 验证安装:
  • rustc --version
       cargo --version

    🌱 第 1 章:Rust 基础知识

    让我们从 Rust 的**基础概念**开始。

    🔤 1.1 变量和常量

  • 不可变变量(默认):
  • let x = 5;
      println!("x: {}", x);  
      // x = 10; // Error: Cannot reassign
  • 可变变量:
  • let mut y = 10;
      y += 5;
      println!("y: {}", y);
  • 常量:
  • const PI: f64 = 3.14159265359;  
      println!("Value of PI: {}", PI);

    📚 1.2 Rust 中的数据类型

    Rust 有一个**静态类型系统**,具有显式和推断类型。

  • 标量类型:整数:i8、i32、u64 浮点数:f32、f64 布尔值:bool 字符:char
  • 复合类型:元组:let tup = (500, 6.4, 'R'); let (x, y, z) = tup; println!("x: {}, y: {}, z: {}", x, y, z); 数组:let arr = [1, 2, 3, 4, 5]; println!("第一个元素:{}", arr[0]);
  • 🔗 第二章:所有权、借用和生命周期

    Rust 的**所有权模型**是其内存安全的基石。

    📦2.1 所有权规则

  • Rust 中的每个值都有一个所有者。
  • 一个值一次只能有一个所有者。
  • 当所有者超出范围时,该值将被丢弃。
  • fn main() {
        let s = String::from("hello");
        takes_ownership(s);  
        // s is no longer valid here
    }
    
    fn takes_ownership(s: String) {
        println!("{}", s);
    }

    ➕ 2.2 借用和引用

    借用允许多个引用而无需转移所有权。

    fn main() {
        let s = String::from("hello");
        print_length(&s);
        println!("Still valid: {}", s);
    }
    
    fn print_length(s: &String) {
        println!("Length: {}", s.len());
    }

    🔒 2.3 可变引用

    Rust 一次只允许一个可变引用:

    fn main() {
        let mut s = String::from("hello");
        change(&mut s);
        println!("Changed: {}", s);
    }
    
    fn change(s: &mut String) {
        s.push_str(", world!");
    }

    🔗 2.4 生命周期

    生命周期可防止悬垂引用。

    fn longest<'a>(x: &'a str, y: &'a str) -> &'a str {
        if x.len() > y.len() { x } else { y }
    }
    fn main() {
        let s1 = "long string";
        let s2 = "short";
        println!("Longest: {}", longest(s1, s2));
    }

    📈 第 3 章:高级概念

    🔄 3.1 模式匹配

    Rust 的 `match` 是一个强大的构造:

    fn main() {
        let number = 6;
        match number {
            1 => println!("One"),
            2..=5 => println!("Between Two and Five"),
            _ => println!("Something else"),
        }
    }

    🔧 3.2 错误处理

  • 展开结果:
  • fn divide(x: i32, y: i32) -> Result {
          if y == 0 {
              Err(String::from("Cannot divide by zero"))
          } else {
              Ok(x / y)
          }
      }
      fn main() {
          match divide(10, 2) {
              Ok(res) => println!("Result: {}", res),
              Err(e) => println!("Error: {}", e),
          }
      }

    第四章:Rust 中的并发

    4.1 线程

    Rust 的线程是内存安全的:

    use std::thread;
    
    fn main() {
        let handle = thread::spawn(|| {
            for i in 1..10 {
                println!("Thread: {}", i);
            }
        });
    
        handle.join().unwrap();
    }

    🌐 第 5 章:现实世界的 Rust 项目

    🚀 5.1 构建命令行工具

    让我们构建一个**简单的 CLI** 来计算文件中的单词数:

    use std::env;
    use std::fs;
    
    fn main() {
        let args: Vec = env::args().collect();
        let filename = &args[1];
        let content = fs::read_to_string(filename).unwrap();
        let word_count = content.split_whitespace().count();
        println!("Word count: {}", word_count);
    }

    🛠️ 5.2 使用 Rocket 进行 Web 开发

    Rust 的 **Rocket** 框架非常适合构建 Web 应用程序:

    #[macro_use] extern crate rocket;
    
    #[get("/")]
    fn index() -> &'static str {
        "Hello, world!"
    }
    
    fn main() {
        rocket::ignite().mount("/", routes![index]).launch();
    }

    📜 福利:Rust 学习路线图

  • 了解所有权和借贷。
  • 掌握 Rust 标准库。
  • 学习并发和异步编程。
  • 探索框架(Rocket、Actix)。
  • 为开源项目做出贡献。
  • 本指南只是开始。Rust 是一种强大的语言,可以伴随您成长。继续练习、构建项目并深入了解 Rust 生态系统。祝您编码愉快!🦀✨