目录 介绍篇 第1章Rust简介 1.1为什么要学习Rust 1.1.1内存安全 1.1.2效率 1.1.3实用性 1.2Rust语言简介 1.3Rust语言应用展望 1.3.1区块链 1.3.2操作系统 1.3.3嵌入式 1.3.4存储 1.3.5隐私计算/编译器 1.4Rust的缺点 1.5如何快速学习Rust 1.5.1通过关注学习 1.5.2通过动手学习 1.5.3通过阅读学习 1.5.4通过传授学习 第2章Rust编程准备工作 2.1Linux下Rust编程环境 2.1.1Rust编译器的下载安装 2.1.2验证 2.1.3设置代理 2.2Windows下编程环境 2.3在线Rust编译器 2.4Rust编译器分支 2.5Rust编译器版本策略 2.6rustc编译命令 2.7Rust编译器管理工具rustup 2.7.1更新rustup自身 2.7.2工具链相关 2.7.3用rustup安装组件 2.7.4rustup常用命令 2.8Rust调试 2.8.1命令行调试 2.8.2可视化调试 2.9Rust标准库 2.10Rust编程的汉字处理 2.11Rust知识点图谱 第3章Cargo项目管理与编译 3.1项目结构 3.2Cargo的配置文件 3.2.1Cargo.toml 3.2.2Cargo.lock 3.2.3Cargo.lock vs Cargo.toml 3.3依赖包 3.4开发时依赖包 3.5Cargo目标对象 3.5.1库对象 3.5.2二进制对象 3.5.3示例对象 3.5.4测试对象 3.5.5基准性能对象 3.5.6配置一个对象 3.6package表 3.7patch表 3.8常用的cargo的命令 3.9扩展cargo命令 3.10特征 3.11profile 3.11.1默认profile 3.11.2自定义profile 3.11.3重写profile 3.12工作空间 3.13Cargo的使用 3.13.1Cargo系统目录 3.13.2Cargo清除缓存 3.13.3构建时卡住 3.13.4target目录结构 3.14config.toml进行Cargo配置 3.15构建脚本 3.15.1builddependencies 3.15.2build.rs 3.15.3构建脚本的生命周期 3.15.4构建脚本的输出 3.15.5构建脚本的依赖 3.15.6覆盖构建脚本 3.16如何组织Rust项目 3.16.1Rust中项目组织的重要性 3.16.2模块、crate和工作空间 3.16.3模块: 代码组织的逻辑单元 3.16.4crate: 可重用的库或可执行文件 3.16.5创建和管理crate 3.16.6工作空间 3.16.7项目组织工具 3.16.8惯例和最佳实践 3.16.9持续集成 3.16.10试运行 3.16.11覆盖率报告和代码质量指标 3.16.12持续改进的重要性 3.17复杂例子 基础篇 第4章编程基础 4.1堆和栈 4.2基本数据类型 4.2.1整型 4.2.2布尔类型 4.2.3字符类型 4.2.4浮点类型 4.3字面量 4.3.1数字字面量 4.3.2字符串字面量 4.3.3字符字面量 4.4元组 4.4.1元组声明 4.4.2元组解构 4.4.3元组索引 4.4.4元组使用 4.4.5特殊情况 4.5范围类型 4.6结构 4.6.1具名结构体 4.6.2元组类型结构体 4.6.3空结构体 4.6.4结构可见性 4.6.5结构/字段的可变性 4.6.6其他 4.7枚举 4.7.1C风格的枚举类型 4.7.2带数据的枚举类型 4.7.3混合类型的枚举类型 4.7.4枚举的内存布局 4.7.5代数数据类型 4.8数组、切片和向量 4.8.1数组 4.8.2向量 4.8.3切片 4.9字符串 4.9.1字符串切片 4.9.2字符串 4.9.3字节字符串 4.9.4其他字符串类型 4.9.5各种字符串类型之间转换 4.9.6写时复制 4.9.7字符串相关操作 4.10变量和可变性 4.10.1变量绑定 4.10.2变量 4.10.3可变性 4.10.4变量的作用域和遮蔽 4.10.5常量和静态全局变量 4.10.6别名 4.10.7类型转换 4.10.8零长度类型 4.11控制语句 4.11.1分支语句match 4.11.2条件语句if 4.11.3循环语句 4.11.4if/let while 4.12函数 4.12.1提早返回 4.12.2发散函数 4.12.3递归函数 4.12.4函数指针和函数作为参数 4.12.5函数嵌套 4.12.6方法 4.12.7函数作为返回值 4.12.8常量函数 4.12.9函数和闭包参数做模式解构 4.12.10其他 4.13注释 4.14运算符 4.14.1一元操作符 4.14.2二元操作符 4.14.3优先级 4.15impl代码块 4.15.1使用impl给结构定义方法 4.15.2使用impl给枚举定义方法 4.16程序的内存表现 4.17文件操作 4.17.1文本文件 4.17.2二进制文件 4.17.3文件路径 4.17.4搜索指定扩展名的文件 4.17.5压缩文件 4.18Rust标准库 4.18.1Rust标准库的特点 4.18.2Rust标准库模块 4.19其他 4.19.1下画线 4.19.2字符串格式化输出 4.19.3Rust类型清单 4.19.4Rust保留字 4.19.5其他 第5章错误处理 5.1对象解封 5.2Expect() 5.3Option类型 5.4Result类型 5.5访问和变换Option和Result类型 5.5.1用map替换match 5.5.2逻辑组合子 5.5.3在Option和Result类型之间互相转换 5.6try!宏 5.7panic!宏 5.8From trait 5.9问号(?)操作符 5.10Carrier Trait 5.11自定义错误类型 5.12Error Crates 5.12.1failure crate 5.12.2snafu crate 5.12.3anyhow crate 5.12.4thiserror crate 5.13Main函数中的错误返回 5.14错误传递 5.15函数中处理多种错误类型 5.16处理特定的错误类型 5.17总结 第6章日志和测试 6.1单元测试 6.1.1单元测试 6.1.2断言宏 6.1.3#[should_panic]属性 6.2集成测试 6.2.1Library crate的集成测试 6.2.2二进制crate的集成测试 6.2.3定义集成入口 6.2.4有选择地执行集成测试案例 6.3文档测试 6.3.1自动生成程序文档 6.3.2编写程序文档 6.3.3运行文档中的测试代码 6.4性能测试 6.4.1nightly分支下的性能测试 6.4.2stable分支下的性能测试 6.4.3其他 6.5日志 6.5.1日志宏 6.5.2日志记录器 6.5.3非结构化/结构化日志 6.5.4常用用法 6.5.5日志相关的环境变量 6.6日志监控 6.7复杂样例 第7章基础篇总结 7.1命令行程序 7.1.1命令行参数解析 7.1.2命令行程序的输入/输出 7.2环境变量读写 7.2.1读取操作系统环境变量 7.2.2读取环境配置文件 7.3文件读写 7.3.1Json文件读写 7.3.2Yaml文件读写 7.3.3Toml文件读写 7.4进程 7.4.1生成子进程 7.4.2终止进程 7.4.3进程信号处理 7.5正则表达式 7.6时间相关 7.6.1标准库的Time crate 7.6.2chrono crate 7.6.3自定义性能测试 7.7区块链相关 7.7.1比特币公私钥生成 7.7.2比特币地址生成 7.7.3keystore文件 7.7.4密码学应用 7.8错误处理 7.8.1版本1 7.8.2版本2 附录词汇表