Rust-使用dotenvy加載和使用環(huán)境變量的過程詳解
系統(tǒng)的開發(fā),測試和部署離不開環(huán)境變量,今天分享在Rust的系統(tǒng)開發(fā)中,使用dotenvy來讀取和使用環(huán)境變量。
安裝
cargo add dotenvy dotenv_codegen
加載環(huán)境變量
use dotenvy::dotenv; fn main() { dotenv().expect(".env不存在"); ... }
dotenvy默認會從項目的根目錄下的.env文件中加載環(huán)境變量。
環(huán)境變量的使用
不僅可以在運行時使用環(huán)境變量,還可以在編譯時使用環(huán)境變量。
運行時使用環(huán)境變量
use std::env; use dotenvy::dotenv; fn main() { dotenv().expect(".env不存在"); //從.env中加載環(huán)境變量 println!("port={}", env::var("port").expect("port")); ... }
編譯時使用環(huán)境變量
#[macro_use] extern crate dotenv_codegen; static redis_url : &'static = dotenv!("redis_url"); fn main() { ... }
好了,從理論上,我們基本掌握了如何通過dotenvy,在Rust的代碼開發(fā)中,如何加載和使用環(huán)境變量。
下面,是在項目的實際應用中,可能會有的疑問,我列了幾個供大家參考。
項目實戰(zhàn)相關(guān)問題
1. .env中的環(huán)境變量和系統(tǒng)中的環(huán)境變量是什么關(guān)系?
系統(tǒng)中的環(huán)境變量優(yōu)先級大于.env中配置的環(huán)境變量。
例如,.env中有port=8000,而當前系統(tǒng)的環(huán)境變量export port=8080,這個時候讀取到的環(huán)境變量port的值是8080
2. 在工程代碼中是否需要處理dotenv的錯誤?
我的建議是,不需要。
這是少數(shù)幾個在Rust的編程開發(fā)中,我個人不建議處理錯誤的地方,讓錯誤以panic的方式終止系統(tǒng)運行。如果當前環(huán)境下不存在.env文件,系統(tǒng)應該停止運行,直至修復錯誤。這里的原則是停下來什么都不做,總比運行起來產(chǎn)生更大的錯誤好。
3. 如果只是在編譯時使用環(huán)境變量,還需要在程序啟動時調(diào)用dotenv()嗎?
不需要。
如果只是在編譯時使用環(huán)境變量,那么可以不用在程序啟動時調(diào)用dotenv()函數(shù),但必須要正編譯時.env文件存在。編譯完成后就可以丟棄.env文件了。
注意,另外,因為是在編譯時就將環(huán)境變量寫入了,所以,對環(huán)境變量的修改將不會對編譯后運行的程序產(chǎn)生影響。
4. 應該在運行時使用環(huán)境變量,還是在編譯時使用環(huán)境變量?
如果環(huán)境變量不會在運行時發(fā)生改變,且在編譯時就知道環(huán)境變量的值,那么推薦在編譯時使用環(huán)境變量。
在編譯時使用環(huán)境變量的幾個好處:
執(zhí)行cargo clippy或者cargo build,編譯器會幫你檢查你使用的環(huán)境變量名稱是否在.env文件中定義,如果不存在,編譯器會給出提示;
相較于通過std::env::var("port").expect("port"),直接使用dotenv!("port")可以不用關(guān)注如果port沒有定義時的處理分支。
5. 如何管理環(huán)境變量的相關(guān)代碼?
建議將環(huán)境變量放在env.rs文件中。
main.rs
#[macro_use] extern crate dotenv_codegen; mod env; use env::PORT; fn main() { println!("port={}", PORT); }
env.rs
pub static PORT: &str = dotenv!("port");
6. 環(huán)境變量和config如何選擇?
哈哈,這個問題不好回答。
其實在config中,也支持環(huán)境變量的。它們在功能上都有相互覆蓋的地方。但是config支持類型的反序列化等豐富的功能。因此,環(huán)境變量和config如何選擇,這還是由項目的實際情況而定吧,不必太拘泥于技術(shù),畢竟技術(shù)是為我們服務的,而不是拿給我們站隊用的。
到此這篇關(guān)于Rust-使用dotenvy加載和使用環(huán)境變量的過程詳解的文章就介紹到這了,更多相關(guān)Rust使用dotenvy加載內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!