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

rust for begginers

Rust 初学者指南,从安装到核心概念,帮你快速上手。


一、安装 Rust

bash

# 官方推荐方式(使用 rustup) curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh # 验证安装 rustc --version cargo --version

二、第一个程序

rust

// main.rs fn main() { println!("Hello, Rust!"); }

bash

# 编译运行 rustc main.rs && ./main # 或用 Cargo(推荐) cargo new hello cd hello cargo run

三、核心概念(Rust 的灵魂)

1. 变量与可变性

rust

let x = 5; // 不可变(默认) let mut y = 10; // 可变 y = 20; const MAX: u32 = 100; // 常量,必须标注类型 let z = 5 + 3; // 可以覆盖(shadowing) let z = "hello"; // 甚至可以改变类型

2. 所有权(Ownership)—— Rust 最核心的机制

三条规则:

  1. 每个值都有一个所有者

  2. 同一时间只能有一个所有者

  3. 所有者离开作用域,值被自动释放

rust

fn main() { let s1 = String::from("hello"); // s1 拥有这个字符串 let s2 = s1; // 所有权转移给 s2(move) // println!("{}", s1); // ❌ 错误!s1 不再有效 let x = 5; let y = x; // ✅ 可以,因为 i32 实现了 Copy trait println!("x = {}, y = {}", x, y); }

3. 借用(Borrowing)

不想转移所有权?用引用:

rust

fn main() { let s = String::from("hello"); let len = calculate_length(&s); // 不可变借用 println!("'{}' 长度是 {}", s, len); // ✅ s 还能用 change(&mut s); // 可变借用 } fn calculate_length(s: &String) -> usize { s.len() // 不获取所有权,只是借用 } fn change(s: &mut String) { s.push_str(", world"); }

借用规则:

  • 要么一个可变引用,要么多个不可变引用

  • 引用必须始终有效(编译器检查,防止悬空指针)

4. 切片(Slice)

rust

let s = String::from("hello world"); let hello = &s[0..5]; // 字符串切片 let world = &s[6..11]; let arr = [1, 2, 3, 4, 5]; let slice = &arr[1..3]; // [2, 3]

四、控制流

rust

let number = 6; if number % 4 == 0 { println!("能被4整除"); } else if number % 3 == 0 { println!("能被3整除"); } else { println!("都不行"); } // if 是表达式,可以返回值 let condition = true; let x = if condition { 5 } else { 6 }; // 循环 loop { // 无限循环 break; } while condition { // while 循环 } for i in 1..4 { // 1, 2, 3(推荐!) println!("{}", i); } let arr = [10, 20, 30]; for element in arr.iter() { println!("值: {}", element); }

五、函数

rust

fn main() { let result = add(5, 3); println!("结果: {}", result); } // 参数类型必须标注,返回类型用 -> fn add(a: i32, b: i32) -> i32 { a + b // 表达式(无分号)就是返回值 }

六、结构体与枚举

rust

// 结构体 struct User { username: String, email: String, sign_in_count: u64, active: bool, } let user1 = User { email: String::from("a@b.com"), username: String::from("alice"), active: true, sign_in_count: 1, }; // 元组结构体 struct Point(i32, i32, i32); // 枚举(非常强大!) enum Message { Quit, Move { x: i32, y: i32 }, Write(String), ChangeColor(i32, i32, i32), } // Option:Rust 没有 null! let some_number = Some(5); let absent_number: Option<i32> = None; // Result:错误处理 enum Result<T, E> { Ok(T), Err(E), }

七、模式匹配(match)

rust

enum Coin { Penny, Nickel, Dime, Quarter, } fn value_in_cents(coin: Coin) -> u8 { match coin { Coin::Penny => { println!("Lucky penny!"); 1 } Coin::Nickel => 5, Coin::Dime => 10, Coin::Quarter => 25, } } // if let 简化版 let some_value = Some(3); if let Some(3) = some_value { println!("三"); }

八、错误处理

rust

use std::fs::File; // Result 类型 let f = File::open("hello.txt"); match f { Ok(file) => file, Err(error) => panic!("打开文件失败: {:?}", error), } // 简写:? 运算符 fn read_username_from_file() -> Result<String, io::Error> { let mut f = File::open("hello.txt")?; // 失败时直接返回 Err let mut s = String::new(); f.read_to_string(&mut s)?; Ok(s) } // 更简 fn read_username_from_file() -> Result<String, io::Error> { fs::read_to_string("hello.txt") } // unwrap() / expect() —— 快速但不安全 let f = File::open("hello.txt").unwrap(); let f = File::open("hello.txt").expect("无法打开文件");

九、集合类型

rust

// Vector let mut v = vec![1, 2, 3]; v.push(4); let third = &v[2]; // 可能 panic let third = v.get(2); // 返回 Option<&T> // String let mut s = String::from("foo"); s.push_str("bar"); let s2 = format!("{}-{}", s, "baz"); // HashMap use std::collections::HashMap; let mut scores = HashMap::new(); scores.insert("Blue", 10); scores.entry("Yellow").or_insert(50); // 不存在才插入

十、生命周期(Lifetimes)

rust

// 告诉编译器:返回的引用和参数活得一样久 fn longest<'a>(x: &'a str, y: &'a str) -> &'a str { if x.len() > y.len() { x } else { y } } // 结构体中的生命周期 struct ImportantExcerpt<'a> { part: &'a str, }

十一、常用 Cargo 命令

bash

cargo new project_name # 创建新项目 cargo build # 编译 cargo build --release # 优化编译(生产环境) cargo run # 编译并运行 cargo check # 快速检查(不生成可执行文件) cargo test # 运行测试 cargo doc --open # 生成并打开文档 cargo add crate_name # 添加依赖

十二、学习路线图

plain

第1周:变量、类型、函数、控制流 第2周:所有权、借用、切片(重点!) 第3周:结构体、枚举、模式匹配 第4周:集合类型、错误处理 第5周:生命周期、trait、泛型 第6周:闭包、迭代器、智能指针 第7周:并发编程( fearless concurrency ) 第8周:unsafe Rust、FFI

推荐资源

表格

资源说明
The Rust Book官方教程,最权威
Rustlings小练习,边做边学
Rust by Example示例驱动
Exercism Rust编程练习

Rust 的编译器很严格,但报错信息非常友好。拥抱编译器错误,它们是在帮你避免运行时 bug!

http://www.jsqmd.com/news/1389308/

相关文章:

  • 异星工厂xp联机总失败?生存建造玩家的自救清单
  • mac终端文件和文件夹操作命令集合
  • SOLO工作者的效率革命:从工具链到心流管理的实战指南
  • 海淀区创业扶持机构哪家入驻流程服务省心:【博亚信诚】高效代办 - 秋山寄远
  • UE5 3DGS 插件:LCC Plugin for UE
  • Claude Code高阶用法:10个提升AI编程效率的实用技巧
  • 本地语音输入法实践指南:从环境配置到工作流集成
  • 游戏手感优化工具:原理、部署与效果验证指南
  • TinyPXE实战:从原理到部署,一站式解决无盘启动与网络安装难题
  • 锐捷交换机十大核心查看命令实战指南:从入门到精通
  • PCB同轴过孔新工艺、SI性能优势及应用前景总结
  • 2026年北京空调维修指南|简单到家服务优势深度解读 - 简单到家
  • 构建智能简历助手:基于记忆管理、用户画像与工具系统的Agent架构实践
  • 技术博客写作指南:如何构建高质量可操作的技术分享内容
  • 海淀区创业扶持机构哪家适合小微企业:【博亚信诚】精准帮扶 - 松梢月冷
  • 2026年8月电缆沟盖板/成都预制沟盖板公司推荐盘点_四川汇鑫合业环保科技有限公司 - 行业平台推荐
  • 2026年百元级入耳式蓝牙耳机选购指南(新手女生向)——参数解析与客观对比
  • 全栈开发者必备软件工具!
  • AI Agent CLI:命令行界面如何成为智能体与真实世界交互的核心枢纽
  • 小熊猫Dev-C++:5分钟搭建C++开发环境的完整指南
  • 开源智能书签管理插件:告别杂乱,实现高效知识检索
  • 大模型驱动新型网络钓鱼攻击的识别机制与分层防御体系研究
  • Teamcenter开发核心:UID与业务对象高效互转原理与实践
  • OpenRouter自动路由实战:低成本高可用调用GPT-4与Claude 3
  • 从One-Hot到BERT:深入解析词嵌入技术原理与工程实践
  • 从Claude Code架构看三层装配线设计:构建高可用AI工具框架
  • 终于搞定文献综述[特殊字符]不用堆文献!okbiye智能综述太省心✅
  • 深度解析营销型网站建设的利与弊:从获客逻辑到成本收益的全面复盘,揭秘企业数字化转型的真实得失
  • 阿里云ES AI引擎版:面向Agent场景的智能搜索引擎架构解析
  • 计算机毕业设计之基于spark的短视频推荐系统的设计与实现正文