之前 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


好文收藏
38 声望6 粉丝

好文收集