關於Rust 使用 dotenv 來設置環境變量的問題
Rust 語言是一種高效、可靠的通用高級語言。其高效不僅限於開發效率,它的執行效率也是令人稱贊的,是一種少有的兼顧開發效率和執行效率的語言。
Rust語言的特點
高性能 – Rust 速度驚人且內存利用率極高。由於沒有運行時和垃圾回收,它能夠勝任對性能要求特別高的服務,可以在嵌入式設備上運行,還能輕松和其他語言集成。
可靠性 – Rust 豐富的類型系統和所有權模型保證瞭內存安全和線程安全,讓您在編譯期就能夠消除各種各樣的錯誤。
生產力 – Rust 擁有出色的文檔、友好的編譯器和清晰的錯誤提示信息, 還集成瞭一流的工具 —— 包管理器和構建工具, 智能地自動補全和類型檢驗的多編輯器支持, 以及自動格式化代碼等等。
在項目中,我們通常需要設置一些環境變量,用來保存一些憑證或其它數據,這時我們可以使用 dotenv 這個 crate。
首先在項目中添加 dotenv 這個依賴:
例如在下面這個項目中,需要設置數據庫連接字符串和 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 環境文件失敗的時候可以忽略錯誤。
代碼:
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()); }
到此這篇關於Rust 使用 dotenv 來設置環境變量的文章就介紹到這瞭,更多相關Rust 設置環境變量內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- 使用Cargo工具高效創建Rust項目
- Rust 入門之函數和註釋實例詳解
- Rust 語言的全鏈路追蹤庫 tracing使用方法
- Rust語言從入門到精通系列之Iterator迭代器深入詳解
- Rust語言從入門到精通之Tokio的Channel深入理解