在專案中,我們通常需要設定一些環境變數,用來保存一些憑證或其它資料,這時我們可以使用 dotenv 這個 crate,
首先在專案中添加 dotenv 這個依賴:
![7
8
9
dependencies]
dotenv = "
o. 15.0"](https://img.uj5u.com/2022/01/23/297414230610501.png)
例如在下面這個專案中,需要設定資料庫連接字串和 Debug 等級這兩個環境變數,在開發環境下,我們可以在專案根目錄下創建 .env 這個檔案:

在 .env 檔案里,我們設定兩個環境變數,分別是 DB_URL 和 LOG_LEVEL:

下面來到 main.rs,想要訪問系統的環境變數,我們使用標準庫的 std::env 即可:

這里,我們先把獲取到的環境變數進行遍歷和列印,然后再分別嘗試列印 PATH、DB_URL 和 LOG_LEVEL 這三個環境變數的值,
結果如下:

我們可以看到,前面是遍歷列印的環境變數,后邊列印出了 PATH 的值,然后在嘗試獲取 DB_URL 值的時候程式就恐慌了,因為沒有找到這個環境變數,
現在我們使用 dotenv 這個 crate:

先把 dotenv 匯入,然后在程式開始的地方執行 dotenv() 函式即可,這就會從當前目錄或父目錄中的 .env 檔案中加載環境變數,
如果你想指定其它路徑,可以使用 crate 中提供的 from_filename 或 from_path 這兩個函式,
好,那么呼叫 dotenv() 之后為什么還要呼叫 ok() 方法?
首先,dotenv() 回傳的是 Result<PathBuf> 型別,如果回傳值不使用的話,就會發出一個警告:

呼叫 ok() 之后,會把 Result 轉化為 Option,而 Option 就不會產生未使用 Result 的警告了,
那么,為什么不使用 unwrap()?
因為在生產環境中,你不會使用 .env 這個檔案,你應該使用真實的環境變數,這時 dotenv() 函式就會加載失敗,如果使用 unwrap(),那么你的程式就會停止運行,
所以這里使用 ok() 的目的就是當加載 dotenv 環境檔案失敗的時候可以忽略錯誤,
代碼:
1 use std::env; 2 use dotenv::dotenv; 3 4 fn main() { 5 dotenv().ok(); 6 7 for (k, v) in env::vars() { 8 println!("{}: {}", k, v); 9 } 10 11 println!("PATH: {}", env::var("PATH").unwrap()); 12 println!("DB: {}", env::var("DB_URL").unwrap()); 13 println!("LOG: {}", env::var("LOG_LEVEL").unwrap()); 14 }

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/419010.html
標籤:其他
