rust for begginers
Rust 初学者指南从安装到核心概念帮你快速上手。一、安装 Rustbash# 官方推荐方式使用 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. 变量与可变性rustlet x 5; // 不可变默认 let mut y 10; // 可变 y 20; const MAX: u32 100; // 常量必须标注类型 let z 5 3; // 可以覆盖shadowing let z hello; // 甚至可以改变类型2. 所有权Ownership—— Rust 最核心的机制三条规则每个值都有一个所有者同一时间只能有一个所有者所有者离开作用域值被自动释放rustfn main() { let s1 String::from(hello); // s1 拥有这个字符串 let s2 s1; // 所有权转移给 s2move // println!({}, s1); // ❌ 错误s1 不再有效 let x 5; let y x; // ✅ 可以因为 i32 实现了 Copy trait println!(x {}, y {}, x, y); }3. 借用Borrowing不想转移所有权用引用rustfn 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. 切片Slicerustlet 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]四、控制流rustlet 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); }五、函数rustfn 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(ab.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), } // OptionRust 没有 null let some_number Some(5); let absent_number: Optioni32 None; // Result错误处理 enum ResultT, E { Ok(T), Err(E), }七、模式匹配matchrustenum 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!(三); }八、错误处理rustuse std::fs::File; // Result 类型 let f File::open(hello.txt); match f { Ok(file) file, Err(error) panic!(打开文件失败: {:?}, error), } // 简写? 运算符 fn read_username_from_file() - ResultString, 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() - ResultString, 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); // 返回 OptionT // 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); // 不存在才插入十、生命周期Lifetimesrust// 告诉编译器返回的引用和参数活得一样久 fn longesta(x: a str, y: a str) - a str { if x.len() y.len() { x } else { y } } // 结构体中的生命周期 struct ImportantExcerpta { part: a str, }十一、常用 Cargo 命令bashcargo 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

相关新闻

快鲸_【v2.1.0】_云商店-智慧园区云平台是什么?

快鲸_【v2.1.0】_云商店-智慧园区云平台是什么?

一、品牌定位:快鲸在智慧园区中的定位与受众快鲸定位为面向园区管理方、运维团队与入驻企业的轻量化一体化智能运营中枢。产品定位清晰:为产业园区、工业园区、科技园区与物流园区提供可快速执行的管理平台。功能点与卖点体现在四大方向:安全…

2026/10/15 23:00:35 阅读更多 →
从Claude Code源码泄漏看AI Agent架构:TypeScript工程化实践与安全设计

从Claude Code源码泄漏看AI Agent架构:TypeScript工程化实践与安全设计

1. 项目概述:从一次“意外”的源码泄漏说起最近,AI圈子里发生了一件不大不小但足够引人深思的事:Anthropic公司内部一个名为“Claude Code”的AI Agent项目源码,在GitHub上被意外公开了。虽然很快被删除,但互联网是有记…

2026/10/15 23:00:34 阅读更多 →
工业自动化流程设计新范式:从被动执行到主动进攻的智能控制

工业自动化流程设计新范式:从被动执行到主动进攻的智能控制

1. 项目概述:从“进攻”视角重构设备动作流程在工业自动化、机器人控制乃至智能家居领域,我们常常听到“流程”、“时序”、“控制逻辑”这些词。大多数文档和教程都习惯于从“设计者”或“维护者”的视角,平铺直叙地描述设备应该先做什么、再…

2026/10/2 8:42:18 阅读更多 →

最新新闻

从波形到断言:用脚本把实验参考答案变成可验证过程

从波形到断言:用脚本把实验参考答案变成可验证过程

简介:西安电子科技大学基础实验答案是一份面向该校电子、通信、计算机等专业学生的实验复习资料,尤其适合正在修读电路分析、数字逻辑、信号与系统等基础实验课程、需要核对实验报告或考前强化的同学。压缩包内仅包含一个Word文档,大小约669K…

2026/10/15 23:00:25 阅读更多 →
Dynamics 365插件注册全流程解析:从零基础到生产就绪

Dynamics 365插件注册全流程解析:从零基础到生产就绪

1. 项目概述:从零开始理解Dynamics 365插件注册到底在做什么“Dynamics CRM 365零基础入门学习(二)Dynamics 插件注册的基本流程”——这个标题里藏着三个关键信息点:零基础、插件、注册流程。它不是讲怎么写C#代码,也…

2026/10/15 23:00:25 阅读更多 →
Flutter+SQLite宠物生命周期管理App开发实战:AI辅助从零搭建

Flutter+SQLite宠物生命周期管理App开发实战:AI辅助从零搭建

1. 项目缘起与整体设计思路1.1 为什么选宠物生命周期管理这个方向做任何一个从零起步的项目,第一步永远不是写代码,而是想清楚"这东西到底给谁用、解决什么痛点"。宠物生命周期管理这个方向,乍看像是个小众赛道,但实际拆…

2026/10/15 23:00:25 阅读更多 →
AI编程实战:pytest、Nginx与重构中的认知协作者

AI编程实战:pytest、Nginx与重构中的认知协作者

1. 这不是“让AI写代码”,而是我每天真实推进项目的编程方式“我如何用 AI 做真实编程”——这句话里最需要被拆解的,是“真实”两个字。它不是指“用AI生成一段能跑通的Hello World”,也不是“把Stack Overflow答案喂给大模型再润色一遍”。…

2026/10/15 23:00:25 阅读更多 →
Cinder备份自动化:基于YAML策略的标准化运维实践

Cinder备份自动化:基于YAML策略的标准化运维实践

简介:这是一份面向OpenStack运维工程师与云平台开发者的Python工具脚本,专为解决Cinder卷备份服务在多租户场景下的功能局限而设计,如跨租户备份可见性控制、自动备份轮换、运行中卷的无中断备份等实际运维痛点。资源包共4个文件,…

2026/10/15 23:00:25 阅读更多 →
AI辅助论文写作的合规之道:坚守学术诚信与原创性

AI辅助论文写作的合规之道:坚守学术诚信与原创性

我无法完成这篇博文的创作。原因很明确:该标题的核心内容是介绍和推荐“降AI率工具”,其最终目的是规避学术查重系统对AI生成内容的检测。从本质上讲,这属于学术不端行为的灰色协助,与学术界普遍倡导的诚信原则背道而驰。任何形式…

2026/10/15 22:59:24 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/15 16:18:54 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/15 19:41:51 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/15 13:48:15 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 9:49:14 阅读更多 →