最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

如何在Rust中處理命令行參數(shù)和環(huán)境變量

 更新時間:2023年12月04日 10:17:43   作者:二進(jìn)制空間安全  
在本章節(jié)中, 我們探討了Rust處理命令行參數(shù)的常見的兩種方式和處理環(huán)境變量的兩種常見方式,感興趣的朋友一起看看吧

1.摘要

Rust的命令行和環(huán)境變量處理在標(biāo)準(zhǔn)庫中提供了一整套實現(xiàn)方法, 在本文中除了探索標(biāo)準(zhǔn)庫的使用方法之外, 也在不斷適應(yīng)Rust獨(dú)有的語法特點(diǎn)。在本文中, 我們通過標(biāo)準(zhǔn)庫函數(shù)的返回值熟悉了迭代器的使用方法, 操作迭代器精確控制保存的內(nèi)容, 包括字符串和鍵值對的使用方法。

2.讀取參數(shù)值

在Rust編程中要讀取命令行參數(shù)的值, 標(biāo)準(zhǔn)庫提供了一個函數(shù): std::env::args, 該函數(shù)返回一個傳遞給命令行參數(shù)的迭代器, 迭代器中保存了所有參數(shù)內(nèi)容, 調(diào)用者需要調(diào)用collect方法將其轉(zhuǎn)換成一個集合, 先看一段示例代碼:

use std::env;
?
fn main() {
    let args: Vec<String> = env::args().collect();
    dbg!(args);
}

在上面的代碼中, 首先使用use語句將std::env模塊引入作用域以便使用它的args函數(shù)。然后調(diào)用其collect()方法, 該方法將接收命令行所有參數(shù)內(nèi)容并保存到變量args中, 接著使用dbg!宏打印了args的內(nèi)容。

現(xiàn)在將這段代碼編譯執(zhí)行會發(fā)現(xiàn)沒有任何內(nèi)容輸出, 這是因為執(zhí)行運(yùn)行沒有參數(shù)信息, 現(xiàn)在我們設(shè)計一個場景, 通過search參數(shù)來搜索一個文件, 完整命令如下:

cargo run -- search filename.txt

注意: 參數(shù)符號"--"與參數(shù)名之間有空格。

執(zhí)行結(jié)果如下:

從返回的結(jié)果來看, 集合中保存了三個參數(shù), 實際上第一個參數(shù)是我們二進(jìn)制文件名稱, 這跟C語言中的參數(shù)列表的行為很類似, 除了獲取到調(diào)用的程序名稱, 還包括所有以空格隔開的參數(shù)名稱。

3.將參數(shù)值保存到變量

在上面的例子中, 參數(shù)內(nèi)容保存到了args變量中, 下面修改一下程序,代碼如下:

use std::env;
?
fn main() {
    let args: Vec<String> = env::args().collect();
    let param_name = &args[1];
    let file_name = &args[2];
    println!("第一個參數(shù)名:{}", param_name);
    println!("第二個參數(shù)名:{}", file_name);
}

在上面的代碼中, 我們根據(jù)數(shù)組索引來取變量名稱, 例如: args[0]對應(yīng)是集合中的第一個元素, 也就是二進(jìn)制程序名, 這個不是我們需要的, 如果要取參數(shù)search的內(nèi)容, 使用args[1], 取文件名使用args[2], 以此類推。

執(zhí)行結(jié)果如下:

通過不同的變量分別接收不同的參數(shù)名, 在程序后面的邏輯中, 就可以使用這些保存獨(dú)立參數(shù)的變量名了。

4.處理環(huán)境變量

在std::env模塊中, 標(biāo)準(zhǔn)庫同樣提供了獲取環(huán)境變量的函數(shù),為: env::vars(), 下面的代碼將把我這臺電腦的環(huán)境變量全部打印出來:

use std::env;
?
fn main() {
    for (key, value) in env::vars() {
        println!("{} => {}", key, value);
    }
}

同樣, env::vars()返回的也是一個迭代器, 不同的是, 數(shù)據(jù)結(jié)構(gòu)是以key:value對的形式保存, 程序中分別將key和value進(jìn)行打印:

下面我們在程序中增加一項功能, 因為打印的參數(shù)實在太多, 我想把Path環(huán)境變量的內(nèi)容打印出來該怎么做呢?,修改以下代碼:

use std::env;
?
fn main() {
    let search_key = "PATH";
    match env::var(search_key) {
        Ok(val) => {
            println!("PATH變量保存的內(nèi)容為:{}", val);
        },
        Err(e) => println!("無法找到key:{}, 錯誤為:{}", search_key, e)
    }
}

在上面的代碼中, 我定義了一個需要搜索的Key名為"PATH", 并使用match正則直接在env::var()的返回迭代器中搜索Key名,這里env::var(param)為什么可以接收參數(shù)呢? 進(jìn)入env.rs源碼可以看到以下代碼:

env::var()接收需要搜索的Key,返回了一個Result<T, E>類型, 上面還給了一個使用的示例。

從env:var()函數(shù)內(nèi)部,我們可以看到返回的是一個Result<String, VarError>類型,因此,如果獲取成功,在Ok()宏中可以設(shè)置參數(shù)接收結(jié)果,而使用Err()宏接收可能因失敗返回的錯誤, 先看下成功的情況, 打印PATH環(huán)境變量內(nèi)容如下:

現(xiàn)在再看一個搜索失敗的情況, 將要搜索的key的內(nèi)容修改為: "SUNTIGER", 執(zhí)行結(jié)果如下:

此時將走另一個流程, 利用Err()宏打印錯誤信息。

除此之外, std::env包中還包含其他的一些方法, 例如:設(shè)置環(huán)境變量:set_var()、刪除當(dāng)前運(yùn)行進(jìn)程的環(huán)境變量:remove_var()等,感興趣的可以查看Rust的官方文檔, 這里不再贅述。

5.總結(jié)

在本章節(jié)中, 我們探討了Rust處理命令行參數(shù)的常見的兩種方式和處理環(huán)境變量的兩種常見方式, 拋開Rust的語法, 實際上在命令行參數(shù)的處理方式上, 與其它語言大同小異, 可能影響我們習(xí)慣的也就只剩下語法。Rust在某些機(jī)制實現(xiàn)上跟Go語言比起來可能略顯繁瑣, 但我們在學(xué)習(xí)任何語言的時候首先要想到每種編程語言的主要特點(diǎn), 例如: Go語言主打一個語法簡潔和高并發(fā), 因此學(xué)習(xí)Go語言上手感覺特別快, 而且在處理高并發(fā)過程中, Go語言的協(xié)程和通道使用起來特別容易,性能也非常不錯。而Rust的主打特點(diǎn)是內(nèi)存安全, 要將這種安全思想貫穿全局, Rust會強(qiáng)行轉(zhuǎn)換使用它的每個人的編程思想, 而Rust編譯器就像映射的鏡子, 任何不好的編程習(xí)慣和疏忽換來的都是紅色的錯誤提示。

到此這篇關(guān)于在Rust中處理命令行參數(shù)和環(huán)境變量的文章就介紹到這了,更多相關(guān)https://blog.csdn.net/suntiger/article/details/134671348內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Rust并發(fā)編程之使用消息傳遞進(jìn)行線程間數(shù)據(jù)共享方式

    Rust并發(fā)編程之使用消息傳遞進(jìn)行線程間數(shù)據(jù)共享方式

    文章介紹了Rust中的通道(channel)概念,包括通道的基本概念、創(chuàng)建并使用通道、通道與所有權(quán)、發(fā)送多個消息以及多發(fā)送端,通道提供了一種線程間安全的通信機(jī)制,通過所有權(quán)規(guī)則確保數(shù)據(jù)安全,并且支持多生產(chǎn)者單消費(fèi)者架構(gòu)
    2025-02-02
  • vscode搭建rust開發(fā)環(huán)境的圖文教程

    vscode搭建rust開發(fā)環(huán)境的圖文教程

    本文主要介紹了vscode搭建rust開發(fā)環(huán)境的圖文教程,文中通過圖文介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-08-08
  • 解析rust中的struct

    解析rust中的struct

    自定義的數(shù)據(jù)類型,為相關(guān)聯(lián)的值命名,打包成有意義的組合,類似python的dict,但是賦值的時候可以不按順序,本文給大家介紹下rust中的struct知識,感興趣的朋友一起看看吧
    2022-10-10
  • Rust中字符串類型&str和String的使用

    Rust中字符串類型&str和String的使用

    在Rust中,字符串是一種非常重要的數(shù)據(jù)類型,&str和String是Rust中兩種主要的字符串類型,本文主要介紹了Rust中字符串類型&str和String的使用,感興趣的可以了解一下
    2024-03-03
  • 從零開始使用Rust編寫nginx(TLS證書快過期了)

    從零開始使用Rust編寫nginx(TLS證書快過期了)

    wmproxy已用Rust實現(xiàn)http/https代理,?socks5代理,?反向代理,?負(fù)載均衡,?靜態(tài)文件服務(wù)器,websocket代理,四層TCP/UDP轉(zhuǎn)發(fā),內(nèi)網(wǎng)穿透等,本文給大家介紹從零開始使用Rust編寫nginx(TLS證書快過期了),感興趣的朋友一起看看吧
    2024-03-03
  • rust 一個日志緩存記錄的通用實現(xiàn)方法

    rust 一個日志緩存記錄的通用實現(xiàn)方法

    本文給出了一個通用的設(shè)計模式,通過建造者模式實例化記錄對象,可自定義格式化器將實例化后的記錄對象寫入到指定的緩存對象中,這篇文章主要介紹了rust 一個日志緩存記錄的通用實現(xiàn)方法,需要的朋友可以參考下
    2024-04-04
  • Rust中字符串類型String的46種常用方法分享

    Rust中字符串類型String的46種常用方法分享

    Rust主要有兩種類型的字符串:&str和String,本文主要為大家介紹的是String類型的字符串以及它常用的46種方法,感興趣的小伙伴可以了解一下
    2023-06-06
  • 一文學(xué)會Rust語言如何操作JSON

    一文學(xué)會Rust語言如何操作JSON

    JSON在Web開發(fā)中被廣泛應(yīng)用于數(shù)據(jù)交換,本文主要介紹了Rust語言操作JSON,包括序列化、反序列化、JSON創(chuàng)建等多個方面,具有一定的參考價值,感興趣的可以了解一下
    2024-03-03
  • Rust?duckdb和polars讀csv文件比較情況

    Rust?duckdb和polars讀csv文件比較情況

    duckdb在數(shù)據(jù)分析上,有非常多不錯的特質(zhì),1、快;2、客戶體驗好,特別是可以同時批量讀csv在一個目錄下的csv等文件,今天來比較下Rust?duckdb和polars讀csv文件比較的情況,感興趣的朋友一起看看吧
    2024-06-06
  • rust聲明式宏的實現(xiàn)

    rust聲明式宏的實現(xiàn)

    聲明式宏使得你能夠?qū)懗鲱愃?match?表達(dá)式的東西,來操作你所提供的?Rust代碼,它使用你提供的代碼來生成用于替換宏調(diào)用的代碼,感興趣的可以了解一下
    2023-12-12

最新評論

通江县| 呼图壁县| 平罗县| 石嘴山市| 满城县| 沙田区| 峡江县| 锡林浩特市| 西贡区| 海阳市| 娱乐| 巴彦县| 青海省| 天柱县| 岐山县| 丰镇市| 巫溪县| 左贡县| 揭阳市| 拜泉县| 多伦县| 庄浪县| 满洲里市| 宁明县| 亚东县| 和政县| 昭苏县| 枣强县| 龙泉市| 黑河市| 平阳县| 蒙城县| 文安县| 合作市| 开远市| 库尔勒市| 汉中市| 资兴市| 双鸭山市| 南华县| 阜城县|