dotenv
我们在开发过程中,需要使用到一些敏感信息,比如私钥、助记词、API 密钥等。
这些信息如果直接写在代码中,可能会导致信息泄露,造成不必要的损失。
一般情况下,我们会将这些信息写在 .env
文件中,然后在代码中加载这些信息。
同时,这个 .env, 要被我们加在 .gitignore 、.dockerignore 等这些同步的配置文件中,避免将敏感信息提交或同步到其他的仓库中。
安装
cargo add dotenv
代码初始化加载
默认从 .env 加载,也可以使用 from_path 指定路径加载。
use dotenv::dotenv; use std::path::Path; fn main() { // 默认加载 .env 文件 dotenv().ok(); // 从指定路径加载 const path = Path::new("./path/to/.env"); dotenv::from_path(path).ok(); }
获取变量的值
获取值,默认的得到的是 string 类型。
#![allow(unused)] fn main() { let api_key = std::env::var("API_KEY").expect("API_KEY must be set"); }
不过,可以使用 unwrap 的串联,转化数据类型。
#![allow(unused)] fn main() { let ok: bool = env::var("ok").unwrap().parse().unwrap(); }
使用实例
use dotenv::dotenv; fn main() { dotenv().ok(); // 必须包含的变量 let api_key = std::env::var("API_KEY").expect("API_KEY must be set"); println!("API_KEY: {}", api_key); // 指定默认值 let port = std::env::var("PORT").unwrap_or_else(|_| "3000".to_string()); println!("PORT: {}", port); let ok: bool = env::var("ok").unwrap().parse().unwrap(); println!("ok -> : {}", ok); }