之前 Rust读取配置文件中介绍了Rust读取json/yaml/toml格式的配置文件,还有一种较为常见的场景是读取环境变量中的信息.
使用Rust执行env
操作,获取到相应内容后进行相应处理,是最直观的方式. 但是也有第三方库,已经对此做了封装.
dotenv 这个crate是不错的选择,迄今已有1700多万次下载. 但看其github 已经有数年没有更新 (大概比较基础,基本功能实现后没什么好更新的了吧...)
使用
cargo init read-env
cd read-env
cargo add dotenv
cargo add dotenv_codegen
vim .env
.env:
# a comment, will be ignored
REDIS_ADDRESS=localhost:6379
MEANING_OF_LIFE=42
main.rs:
extern crate dotenv;
use dotenv::dotenv;
use dotenv_codegen::dotenv;
use std::env;
fn main() {
dotenv().ok();
// 打印全部env信息(相比于直接在机器上执行env命令,该crate还会把很多cargo相关的信息打印出来)
for (key, value) in env::vars() {
println!("{}: {}", key, value);
}
println!("--------");
// 打印GOPATH
match env::var("GOPATH") {
Ok(path) => println!("GOPATH is: {:?}", path),
Err(e) => println!("Couldn't read GOPATH: {:?}", e),
}
println!("--------");
// 从项目的.env文件中获取value
// dotenv_codegen 提供 dotenv! 宏,其行为与 env 相同,但首先尝试在编译时加载 .env 文件
println!("{}", dotenv!("MEANING_OF_LIFE"));
}
执行cargo run, 输出:
# 略过
--------
GOPATH is: "/Users/xxx/go"
--------
42
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。