1. 程式人生 > 程式設計 >關於Rust 使用 dotenv 來設定環境變數的問題

關於Rust 使用 dotenv 來設定環境變數的問題

Rust 語言是一種高效、可靠的通用高階語言。其高效不僅限於開發效率,它的執行效率http://www.cppcns.com也是令人稱讚的,是一種少有的兼顧開發效率和執行效率的語言。

Rust語www.cppcns.com言的特點

高效能 - Rust 速度驚人且記憶體利用率極高。由於沒有執行時和垃圾回收,它能夠勝任對效能要求特別高的服務,可以在嵌入式裝置上執行,還能輕鬆和其他語言整合。

可靠性 - Rust 豐富的型別系統和所有權模型保證了記憶體安全和執行緒安全,讓您在編譯期就能夠消除各種各樣的錯誤。

生產力 - Rust 擁有出色的文件、友好的編譯器和清晰的錯誤提示資訊, 還集成了一流的工具 —— 包管理器和構建工具, 智慧地自動補全和型別檢驗的多編輯器支援, 以及自動格式化程式碼等等。

在專案中,我們通常需要設定一些環境變數,用來儲存一些憑證或其它資料,這時我們可以使用 dotenv 這個 crate。

首先在專案中新增 dotenv 這個依賴:

關於Rust使用dotenv來設定環境變數的問題

例如在下面這個專案中,需要設定連線字串和 Debug 等級這兩個環境變數。在開發環境下,我們可以在專案根目錄下建立 .env 這個檔案:

關於Rust使用dotenv來設定環境變數的問題

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

關於Rust使用dotenv來設定環境變數的問題

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

關於Rust使用dotenv來設定環境變數的問題

這裡,我們先把獲取到的環境變數進行遍歷和列印,然後再分別嘗試列印 PATH、DB_URL 和 LOG_LEVEL 這三個環境變數的值。

結果如下:

關於Rust使用dotenv來設定環境變數的問題

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

現在我們使用 dotenv 這個 crate:

關於Rust使用dotenv來設定環境變數的問題

先把 dotenv 匯入,然後在程式開始的地方執行 dotenv() 函式即可,這就會從當前目錄或父目錄中的 .env 檔案中載入環境變數。

如果你想指定GzciTlb其它路徑,可以使用 crate 中提供的 from_filename 或 from_path 這兩個函式。

好,那麼呼叫 dotenv() 之後為什麼還要呼叫 ok() 方法?

首先,dotenv() 返回的是 Result<PathBuf&http://www.cppcns.com

gt; 型別,如果返回值不使用的話,就會發出一個警告:

關於Rust使用dotenv來設定環境變數的問題

呼叫 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設定環境變數內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!