欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Rust-使用dotenvy加載和使用環(huán)境變量的過程詳解

 更新時間:2023年11月14日 12:13:55   作者:明天好,會的  
系統(tǒng)的開發(fā),測試和部署離不開環(huán)境變量,今天分享在Rust的系統(tǒng)開發(fā)中,使用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如何選擇?

哈哈,這個問題不好回答。

之前寫了一篇Rust-使用config配置你的API

其實在config中,也支持環(huán)境變量的。它們在功能上都有相互覆蓋的地方。但是config支持類型的反序列化等豐富的功能。因此,環(huán)境變量和config如何選擇,這還是由項目的實際情況而定吧,不必太拘泥于技術(shù),畢竟技術(shù)是為我們服務的,而不是拿給我們站隊用的。

到此這篇關(guān)于Rust-使用dotenvy加載和使用環(huán)境變量的過程詳解的文章就介紹到這了,更多相關(guān)Rust使用dotenvy加載內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 深入了解Rust的生命周期

    深入了解Rust的生命周期

    生命周期指的是引用保持有效的作用域,Rust?的每個引用都有自己的生命周期。本文將通過示例和大家詳細說說Rust的生命周期,需要的可以參考一下
    2022-11-11
  • rust類型轉(zhuǎn)換的實現(xiàn)

    rust類型轉(zhuǎn)換的實現(xiàn)

    Rust是類型安全的語言,因此在Rust中做類型轉(zhuǎn)換不是一件簡單的事,本文主要介紹了rust類型轉(zhuǎn)換的實現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2023-12-12
  • Rust 語言中的dyn 關(guān)鍵字及用途解析

    Rust 語言中的dyn 關(guān)鍵字及用途解析

    在Rust中,"dyn"關(guān)鍵字用于表示動態(tài)分發(fā)(dynamic dispatch),它通常與trait對象一起使用,以實現(xiàn)運行時多態(tài), 在Rust中,多態(tài)是通過trait和impl來實現(xiàn)的,這篇文章主要介紹了Rust 語言中的 dyn 關(guān)鍵字,需要的朋友可以參考下
    2024-03-03
  • 一文弄懂Rust之切片

    一文弄懂Rust之切片

    在Rust中,切片是一種非常重要的引用類型,它允許你安全地引用一段連續(xù)內(nèi)存中的數(shù)據(jù),而不需要擁有這些數(shù)據(jù)的所有權(quán),本文主要介紹了Rust之切片,感興趣的可以了解一下
    2024-03-03
  • Rust的泛型、Traits與生命周期用法及說明

    Rust的泛型、Traits與生命周期用法及說明

    本文通過一個尋找列表中最大值的示例,展示了如何從重復代碼中提取函數(shù),再利用泛型實現(xiàn)代碼復用,主要步驟包括:識別重復邏輯;抽象提??;泛型應用;進一步擴展,通過不斷抽象和泛化,我們不僅能減少代碼重復,還能寫出更通用、健壯和可維護的代碼
    2025-02-02
  • Rust中的引用循環(huán)與內(nèi)存泄漏詳解

    Rust中的引用循環(huán)與內(nèi)存泄漏詳解

    這篇文章主要介紹了在Rust中如何使用Rc和RefCell來創(chuàng)建引用循環(huán),以及引用循環(huán)可能導致的內(nèi)存泄漏問題,文章還討論了如何使用Weak類型來解決引用循環(huán)問題,特別是在需要雙向引用的場景中,如樹形結(jié)構(gòu),通過理解和掌握這些智能指針的使用,可以編寫更高效且內(nèi)存安全的Rust程序
    2025-02-02
  • Rust Option類型基本使用詳解

    Rust Option類型基本使用詳解

    Rust的Option是一種強大的類型,用于處理可能為空的情況,避免了許多空值引起的運行時錯誤,本文介紹Rust Option類型詳解,感興趣的朋友一起看看吧
    2024-02-02
  • 詳解Rust Substrate框架中的Runtime

    詳解Rust Substrate框架中的Runtime

    ubstrate是一個區(qū)塊鏈開發(fā)框架,它提供了一系列模塊化和可擴展的組件,可以幫助開發(fā)人員快速構(gòu)建自定義區(qū)塊鏈。 Runtime是Substrate區(qū)塊鏈的核心部分,文中有詳細的代碼示例,需要的朋友可以參考下
    2023-05-05
  • 關(guān)于rust的模塊引入問題

    關(guān)于rust的模塊引入問題

    Rust 語言是一種高效、可靠的通用高級語言,它的執(zhí)行效率也是令人稱贊的,是一種少有的兼顧開發(fā)效率和執(zhí)行效率的語言,這篇文章主要介紹了rust的模塊引入相關(guān)知識,需要的朋友可以參考下
    2022-10-10
  • 聊聊Rust 運算符

    聊聊Rust 運算符

    運算符 用于對數(shù)據(jù)執(zhí)行一些操作。被運算符執(zhí)行操作的數(shù)據(jù)我們稱之為操作數(shù)。下面通過本文給大家介紹Rust 運算符的相關(guān)知識,感興趣的朋友一起看看吧
    2021-11-11

最新評論