ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

Cargo 工作区管理开发短记:上线配置如何收口

Cargo 工作区管理开发短记:上线配置如何收口 Cargo 工作区管理开发短记上线配置如何收口我给小命令行工具加配置时最先犯的错是把默认值、环境变量读取和命令行参数散在不同模块里。后来想改一个超时就得找好几处。比较省心的做法是先收敛到一个配置结构体再写清优先级默认值最低配置文件其次环境变量和命令行参数按需要覆盖。#[derive(Debug, PartialEq)] struct AppConfig { log_level: String, timeout_seconds: u64, } impl Default for AppConfig { fn default() - Self { Self { log_level: info.into(), timeout_seconds: 10 } } } fn with_log_level(mut config: AppConfig, value: Optionstr) - AppConfig { if let Some(value) value.filter(|value| !value.is_empty()) { config.log_level value.into(); } config } #[test] fn explicit_value_overrides_the_default() { assert_eq!(with_log_level(AppConfig::default(), Some(debug)).log_level, debug); }这里故意没有把完整配置打印出来。配置里一旦出现访问令牌、密码或服务地址日志就可能把它们带走。更稳妥的config check只显示字段是否已设置、最终使用的非敏感选项敏感值显示为“已配置”。示例文档也用EXAMPLE_TOKEN这样的占位符绝不贴本机路径或真实变量。发布前我会在一个新的临时目录里跑cargo run -- config check再用最小配置启动一次。这个验证只能覆盖当前支持的平台路径规则、文件权限和环境变量在不同系统上会有差异。把不支持的情况写在错误信息里比悄悄回退到奇怪的默认值好。
返回列表