既然你已经重构了底层架构并去除了冗余的全局函数,README 也需要随之“进化”,重点突出对象式调用带来的丝滑体验。
以下是为你优化后的 README.md。我修正了版本号,精简了 API 说明,并加入了你发现的那个“模块化管理”的最佳实践建议。
🚀 QEnv (v0.2.0)
一个极致轻量、类型安全、零克隆(Zero-Clone)的 Rust 环境变量管理框架。
✨ v0.2.0 核心进化
- 🪄 无需 Trait 导入: 通过
define!宏生成的常量可以直接调用.get()或.take()。 - 🛡️ 强类型契约: 移除了不可控的字符串接口,强制通过 Tag 访问,从根源消除拼写错误。
- 🧩 模块化友好: 支持在独立模块(如
env.rs)中批量定义,全项目路径访问。
📦 安装
在 Cargo.toml 中添加:
[]
= "0.2.0"
🛠️ 快速开始
1. 定义与初始化
建议在一个集中的位置(如 mod env)定义你的环境变量:
// src/env.rs
define!
2. 初始化与使用
use qenv;
// 引入你定义的变量
3. 安全处理 (Try 系列)
如果不确定变量是否存在,或者需要处理转换错误,可以使用 try_ 方法:
// 不带默认值的变量
define!;
match OPTIONAL_CONFIG.try_get
// 尝试转换类型
if let Ok = PORT.
🧩 进阶配置
性能说明
QEnv 在初始化时将所有环境变量一次性存入 OnceLock<HashMap>。后续所有的 .get() 操作均返回 字符串引用。
这意味着在你的业务逻辑中频繁读取环境变量是零开销的,完全不需要 clone()。
关闭默认的 Dotenv 支持
在 Docker 环境或生产环境中,你可能不需要 .env 文件支持:
[]
= { = "0.2.0", = false }
📑 错误类型说明
qenv 提供结构化的 EnvError 以便精确处理异常:
InitializeError: 重复调用init()。NotInitialized: 未调用init()就尝试读取。Missing(name): 变量缺失且没有默认值。ParseError: 字符串转换为目标类型(如u16,f64,bool)失败。
🤝 贡献
欢迎提交 Issue 或 Pull Request!
📜 许可证
本项目采用 MIT 许可证。