Rust 个人代码风格规范

导入规范

类型直接导入,函数带模块名

  • 结构体、枚举、常量等类型直接导入名称使用
  • 函数只导入其所在模块,通过 module::func() 调用
1
2
3
4
5
6
7
8
9
// ✅
use std::collections::HashMap; // 类型:直接导入
use std::fs; // 函数:导入模块
fs::read_to_string("config.toml")?;

// ❌
use std::collections; // 类型不应该带模块前缀
collections::HashMap::new();
use std::fs::read_to_string; // 函数不应该直接导入

避免遮蔽标准库名称

  • 如果导入的名称与 std::prelude::* 中的同名项冲突,使用时应显式带路径前缀
  • 如果导入的模块名与 std::* 下同名模块冲突,应使用完整路径
1
2
3
4
5
6
7
8
// ✅
fn do_something() -> anyhow::Result<()> { ... } // 不遮蔽 std Result
tokio::io::stdin(); // 不和 std::io 混淆

// ❌
use anyhow::Result; // 遮蔽了 prelude 中的 Result
use tokio::io; // io 指代不明
io::stdin();

可选:减少不必要的导入

  • 标准库中存在同路径名称时,可直接写全路径:tokio::net::TcpStream::connect(addr)
  • 只使用一次的函数,可不导入直接写绝对路径:my_crate::my_module::one_off_func()

相对路径导入

  • 同级/父级模块酌情使用 self::super::,跨多层时使用 crate::

模块文件结构

  • 不使用 mod.rs,改用「同名 .rs 文件 + 同名目录」的方式组织子模块
1
2
3
4
5
6
7
8
9
10
11
12
13
// ✅
src/
├── server.rs // mod server 的入口
└── server/
├── handler.rs
└── middleware.rs

// ❌
src/
└── server/
├── mod.rs // 避免使用 mod.rs
├── handler.rs
└── middleware.rs

缩写处理

  • 缩写词在类型名中视为普通单词:HttpClient(不是 HTTPClient)、JsonParser(不是 JSONParser
  • 函数/变量名中全小写:parse_json(不是 parse_JSON

Rust 个人代码风格规范
https://neo.mufanc.xyz/posts/62863/
作者
Mufanc
发布于
2026年3月31日
许可协议