關(guān)于Rust?使用?dotenv?來設(shè)置環(huán)境變量的問題
Rust 語言是一種高效、可靠的通用高級(jí)語言。其高效不僅限于開發(fā)效率,它的執(zhí)行效率也是令人稱贊的,是一種少有的兼顧開發(fā)效率和執(zhí)行效率的語言。
Rust語言的特點(diǎn)
高性能 - Rust 速度驚人且內(nèi)存利用率極高。由于沒有運(yùn)行時(shí)和垃圾回收,它能夠勝任對(duì)性能要求特別高的服務(wù),可以在嵌入式設(shè)備上運(yùn)行,還能輕松和其他語言集成。
可靠性 - Rust 豐富的類型系統(tǒng)和所有權(quán)模型保證了內(nèi)存安全和線程安全,讓您在編譯期就能夠消除各種各樣的錯(cuò)誤。
生產(chǎn)力 - Rust 擁有出色的文檔、友好的編譯器和清晰的錯(cuò)誤提示信息, 還集成了一流的工具 —— 包管理器和構(gòu)建工具, 智能地自動(dòng)補(bǔ)全和類型檢驗(yàn)的多編輯器支持, 以及自動(dòng)格式化代碼等等。
在項(xiàng)目中,我們通常需要設(shè)置一些環(huán)境變量,用來保存一些憑證或其它數(shù)據(jù),這時(shí)我們可以使用 dotenv 這個(gè) crate。
首先在項(xiàng)目中添加 dotenv 這個(gè)依賴:
例如在下面這個(gè)項(xiàng)目中,需要設(shè)置數(shù)據(jù)庫連接字符串和 Debug 等級(jí)這兩個(gè)環(huán)境變量。在開發(fā)環(huán)境下,我們可以在項(xiàng)目根目錄下創(chuàng)建 .env 這個(gè)文件:
在 .env 文件里,我們?cè)O(shè)置兩個(gè)環(huán)境變量,分別是 DB_URL 和 LOG_LEVEL:
下面來到 main.rs,想要訪問系統(tǒng)的環(huán)境變量,我們使用標(biāo)準(zhǔn)庫的 std::env 即可:
這里,我們先把獲取到的環(huán)境變量進(jìn)行遍歷和打印,然后再分別嘗試打印 PATH、DB_URL 和 LOG_LEVEL 這三個(gè)環(huán)境變量的值。
結(jié)果如下:
我們可以看到,前面是遍歷打印的環(huán)境變量,后邊打印出了 PATH 的值。然后在嘗試獲取 DB_URL 值的時(shí)候程序就恐慌了,因?yàn)闆]有找到這個(gè)環(huán)境變量。
現(xiàn)在我們使用 dotenv 這個(gè) crate:
先把 dotenv 導(dǎo)入,然后在程序開始的地方執(zhí)行 dotenv() 函數(shù)即可,這就會(huì)從當(dāng)前目錄或父目錄中的 .env 文件中加載環(huán)境變量。
如果你想指定其它路徑,可以使用 crate 中提供的 from_filename 或 from_path 這兩個(gè)函數(shù)。
好,那么調(diào)用 dotenv() 之后為什么還要調(diào)用 ok() 方法?
首先,dotenv() 返回的是 Result<PathBuf> 類型,如果返回值不使用的話,就會(huì)發(fā)出一個(gè)警告:
調(diào)用 ok() 之后,會(huì)把 Result 轉(zhuǎn)化為 Option,而 Option 就不會(huì)產(chǎn)生未使用 Result 的警告了。
那么,為什么不使用 unwrap()?
因?yàn)樵谏a(chǎn)環(huán)境中,你不會(huì)使用 .env 這個(gè)文件,你應(yīng)該使用真實(shí)的環(huán)境變量,這時(shí) dotenv() 函數(shù)就會(huì)加載失敗,如果使用 unwrap(),那么你的程序就會(huì)停止運(yùn)行。
所以這里使用 ok() 的目的就是當(dāng)加載 dotenv 環(huán)境文件失敗的時(shí)候可以忽略錯(cuò)誤。
代碼:
use std::env; use dotenv::dotenv; fn main() { dotenv().ok(); for (k, v) in env::vars() { println!("{}: {}", k, v); } println!("PATH: {}", env::var("PATH").unwrap()); println!("DB: {}", env::var("DB_URL").unwrap()); println!("LOG: {}", env::var("LOG_LEVEL").unwrap()); }
到此這篇關(guān)于Rust 使用 dotenv 來設(shè)置環(huán)境變量的文章就介紹到這了,更多相關(guān)Rust 設(shè)置環(huán)境變量?jī)?nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Rust使用kind進(jìn)行異常處理(錯(cuò)誤的分類與傳遞)
Rust?有一套獨(dú)特的處理異常情況的機(jī)制,它并不像其它語言中的?try?機(jī)制那樣簡(jiǎn)單,這篇文章主要介紹了Rust指南錯(cuò)誤的分類與傳遞以及使用kind進(jìn)行異常處理,需要的朋友可以參考下2022-09-09Rust中non_exhaustive的enum使用確保程序健壯性
這篇文章主要為大家介紹了Rust中non_exhaustive的enum使用確保程序健壯性示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-11-11Windows系統(tǒng)下安裝Rust環(huán)境超詳細(xì)教程
這篇文章主要介紹了如何在Windows系統(tǒng)上安裝mingw64和Rust,mingw64是一個(gè)輕便的C語言編譯環(huán)境,可以替代Rust默認(rèn)使用的Visual?Studio,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下2025-02-02Rust中的Drop特性之解讀自動(dòng)化資源清理的魔法
Rust通過Drop特性實(shí)現(xiàn)了自動(dòng)清理機(jī)制,確保資源在對(duì)象超出作用域時(shí)自動(dòng)釋放,避免了手動(dòng)管理資源時(shí)可能出現(xiàn)的內(nèi)存泄漏或雙重釋放問題,智能指針如Box、Rc和RefCell都依賴于Drop來管理資源,提供了靈活且安全的資源管理方案2025-02-02