9.0 KiB
		
	
	
	
	
	
	
	
			
		
		
	
	当然可以 👍
Rust 的 std(标准库,standard library) 是整个语言生态的核心组成部分,它提供了 语言运行时支持、内存管理、集合、I/O、并发、系统接口、错误处理、数值计算 等几乎所有基础功能。
我可以帮你系统地、分层地介绍一遍「std 的全貌 + 每个模块的主要功能 + 常用类型和技巧」。
🧱 一、std 总体结构
Rust 标准库的顶层结构大体可以分为以下几层:
| 层级 | 模块 | 说明 | 
|---|---|---|
| 基础层 | std::marker, std::mem, std::ptr, std::cell, std::rc, std::sync | 
管理内存、引用、生命周期、并发引用计数等底层特性 | 
| 语言支持层 | std::ops, std::convert, std::cmp, std::clone, std::fmt, std::default, std::hash | 
实现语言语义所需的 trait(加减乘除、比较、拷贝、格式化、哈希等) | 
| 基础类型层 | std::option, std::result, std::string, std::vec, std::boxed, std::collections | 
基本容器和控制结构 | 
| 系统接口层 | std::fs, std::io, std::env, std::process, std::path, std::time, std::net | 
系统 I/O、文件系统、环境变量、网络、进程、时间等 | 
| 并发层 | std::thread, std::sync, std::sync::mpsc, std::sync::atomic | 
多线程、通道通信、同步原语 | 
| 错误与调试层 | std::error, std::panic, std::backtrace, std::dbg! | 
错误处理、panic 栈回溯、调试工具 | 
| 预导入层(prelude) | std::prelude::v1 | 
默认导入到每个作用域的常用类型,如 Option, Result, Vec, Box, String, Clone, Drop 等 | 
| 运行时支持层 | std::process, std::alloc, std::thread::panicking | 
运行时内存分配、程序退出、panic 处理 | 
🧩 二、核心模块详解
1. std::prelude
Rust 每个文件默认导入:
use std::prelude::v1::*;
包含:
- 基本类型别名:
Box,Vec,String - 常用 traits:
Clone,Copy,Drop,PartialEq,PartialOrd,Iterator,From,Into,Default - 基本枚举:
Option,Result 
2. std::io —— 输入输出系统
主要结构:
- 
Traits
Read、Write:流式读写BufRead:带缓冲的读取Seek:文件定位
 - 
常用类型
stdin(),stdout(),stderr()Cursor:让字节缓冲区当作文件使用
 - 
示例
use std::io::{self, Write}; fn main() { print!("请输入名字:"); io::stdout().flush().unwrap(); let mut name = String::new(); io::stdin().read_line(&mut name).unwrap(); println!("你好,{}!", name.trim()); } 
3. std::fs —— 文件系统
- 
File:文件读写 - 
read_to_string():快速读取文件 - 
write():写文件 - 
metadata():文件信息 - 
create_dir_all():创建多层目录 - 
示例
use std::fs; fn main() { fs::write("hello.txt", "Hello, world!").unwrap(); let s = fs::read_to_string("hello.txt").unwrap(); println!("{}", s); } 
4. std::env
- 
环境变量:
env::var("PATH") - 
命令行参数:
env::args() - 
当前路径:
env::current_dir() - 
示例
use std::env; fn main() { for arg in env::args() { println!("参数: {arg}"); } } 
5. std::thread + std::sync —— 并发
- 
thread::spawn:创建线程 - 
join:等待线程结束 - 
Mutex/RwLock:锁机制 - 
Arc<T>:原子引用计数 - 
mpsc:多生产者单消费者通道 - 
示例
use std::thread; use std::sync::{Arc, Mutex}; fn main() { let counter = Arc::new(Mutex::new(0)); let mut handles = vec![]; for _ in 0..10 { let counter = Arc::clone(&counter); let handle = thread::spawn(move || { let mut num = counter.lock().unwrap(); *num += 1; }); handles.push(handle); } for h in handles { h.join().unwrap(); } println!("结果: {}", *counter.lock().unwrap()); } 
6. std::collections —— 集合容器
主要类型:
- 
VecDeque(双端队列) - 
LinkedList - 
HashMap,HashSet - 
BTreeMap,BTreeSet(有序) - 
常用方法:
insert,get,remove,entry
use std::collections::HashMap; fn main() { let mut scores = HashMap::new(); scores.insert("Alice", 90); scores.insert("Bob", 85); println!("{:?}", scores.get("Alice")); } 
7. std::option & std::result
- 
Option<T>: 可能有值,也可能没有 - 
Result<T, E>: 成功/失败的封装 - 
关键方法:
.unwrap(),.unwrap_or(),.map(),.and_then().ok(),.err(),.expect()
fn div(a: f64, b: f64) -> Result<f64, &'static str> { if b == 0.0 { Err("除数不能为0") } else { Ok(a / b) } } 
8. std::path & std::process & std::time
- 
Path,PathBuf:路径处理 - 
Command:运行外部命令 - 
Instant,Duration,SystemTime:时间测量use std::process::Command; fn main() { let out = Command::new("echo").arg("Hello").output().unwrap(); println!("{}", String::from_utf8_lossy(&out.stdout)); } 
9. std::sync::atomic
- 
原子操作(无锁)
AtomicBool,AtomicI32,AtomicUsize等- 操作:
load(),store(),fetch_add(),compare_exchange() 
use std::sync::atomic::{AtomicUsize, Ordering}; static COUNTER: AtomicUsize = AtomicUsize::new(0); fn main() { COUNTER.fetch_add(1, Ordering::SeqCst); } 
10. std::net
- 
TcpStream,TcpListener - 
UdpSocket - 
ToSocketAddrsuse std::net::TcpListener; fn main() -> std::io::Result<()> { let listener = TcpListener::bind("127.0.0.1:8080")?; for stream in listener.incoming() { println!("连接: {:?}", stream?); } Ok(()) } 
11. std::error, std::panic, std::backtrace
Errortrait:所有错误类型实现panic!():触发不可恢复错误catch_unwind():捕获 panicbacktrace::Backtrace:调试栈信息
12. std::mem & std::ptr —— 底层内存操作
mem::swap,mem::take,mem::replaceptr::null,ptr::copy,ptr::write- 这些是「unsafe」核心模块,支撑 
Vec,Box等容器的实现。 
🧮 三、一些常用顶层类型
| 类型 | 用途 | 
|---|---|
String / &str | 
UTF-8 字符串 | 
Vec<T> | 
动态数组 | 
Box<T> | 
堆分配的对象 | 
Rc<T> / Arc<T> | 
引用计数(单线程/多线程) | 
Mutex<T> / RwLock<T> | 
同步锁 | 
HashMap<K, V> / BTreeMap<K, V> | 
字典映射 | 
Option<T> / Result<T, E> | 
控制流程 | 
thread::JoinHandle<T> | 
线程句柄 | 
Duration / Instant | 
时间度量 | 
🧭 四、std 与 core / alloc 的关系
Rust 标准库其实分三层:
core:最基础层(无堆内存、无操作系统),适用于no_std环境。alloc:提供堆分配支持,如Box,Vec,String。std:在前两者之上 + 操作系统 API + I/O + 并发。
结构如下:
core ──→ alloc ──→ std
📚 五、如何学习和查找
👉 命令行文档查看:
rustup doc --std
👉 在线官方文档(推荐): 🔗 https://doc.rust-lang.org/std/
如果你愿意,我可以帮你生成一份 「std 模块思维导图(层级树)」 或者 「最常用 50 个 std 函数速查表」,方便查阅。
你想要哪种?