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

新手輕松入門(mén)rus學(xué)習(xí)t語(yǔ)言(基礎(chǔ)、高級(jí)語(yǔ)法和生態(tài)框架)

 更新時(shí)間:2026年01月17日 14:56:11   作者:陽(yáng)明Coding  
這篇文章介紹了Rust語(yǔ)言的歷史、設(shè)計(jì)理念、環(huán)境安裝、關(guān)鍵特性和使用場(chǎng)景,并詳細(xì)講解了所有權(quán)系統(tǒng)、Cargo包管理器、變量類型、基礎(chǔ)語(yǔ)法、高級(jí)概念如生命周期、閉包和迭代器、并發(fā)模型、宏編程、異步編程、錯(cuò)誤處理以及Rust生態(tài)系統(tǒng)中的常用框架和工具

這篇文章給所有想要學(xué)習(xí)rust語(yǔ)言的同學(xué)進(jìn)行一個(gè)學(xué)習(xí)參考,rust語(yǔ)言是一款正在崛起的語(yǔ)言,希望每個(gè)出于熱愛(ài)或者工作學(xué)習(xí)Rust的朋友都能有收獲

 

rust的故事

2006 年,Graydon Hoare 這一年 29 歲,是 Mozilla 瀏覽器公司的程序員。有一天他下班回到溫哥華的公寓,結(jié)果發(fā)現(xiàn)電梯又壞了——原因是系統(tǒng)崩潰了,而且不是第一次了。

他住在 21 樓,只能硬著頭皮爬樓梯。一邊爬,一邊越想越氣:“我們搞計(jì)算機(jī)的,居然連個(gè)不會(huì)崩潰的電梯程序都做不出來(lái),簡(jiǎn)直離譜。”

他很清楚,這類故障常常是內(nèi)存管理出問(wèn)題。像電梯這種嵌入式設(shè)備里,軟件大多是用 C 或 C++ 寫(xiě)的。這類語(yǔ)言運(yùn)行快、占空間小,但也容易出錯(cuò),尤其是容易引入“內(nèi)存漏洞”——只要處理不當(dāng),程序就會(huì)直接崩潰。

微軟曾經(jīng)統(tǒng)計(jì)過(guò),它自家代碼中高達(dá) 70% 的漏洞,都和 C/C++ 寫(xiě)的內(nèi)存管理有關(guān)。

大多數(shù)人可能就是罵幾句了事,但 Hoare 決定做點(diǎn)什么。他回到家,打開(kāi)筆記本,開(kāi)始設(shè)計(jì)一門(mén)新語(yǔ)言。他想要一種既能寫(xiě)出小而快的程序,又能在根本上避免內(nèi)存 bug 的語(yǔ)言。

他給這門(mén)語(yǔ)言起名叫 Rust,靈感來(lái)自一種非常頑強(qiáng)的真菌——在他眼里,這個(gè)名字意味著“為生存而過(guò)度設(shè)計(jì)”

這正是 Rust 的設(shè)計(jì)哲學(xué):
程序可以慢慢變舊,但不能悄悄變壞。

rust的發(fā)展歷程

Rust 的發(fā)展歷程并不光鮮,甚至可以說(shuō)一度接近夭折。它最早起源于 2006 年,是 Mozilla 工程師 Graydon Hoare 在個(gè)人時(shí)間里發(fā)起的一個(gè)實(shí)驗(yàn)性項(xiàng)目,初衷很簡(jiǎn)單:擺脫 C/C++ 中長(zhǎng)期困擾系統(tǒng)開(kāi)發(fā)者的內(nèi)存安全與并發(fā)問(wèn)題。那時(shí)的 Rust 只是一個(gè)個(gè)人嘗試,沒(méi)有明確的目標(biāo),也談不上生態(tài)和穩(wěn)定性。

2009 年 Mozilla 接手 Rust 后,這門(mén)語(yǔ)言并沒(méi)有立刻走向成熟,反而經(jīng)歷了長(zhǎng)期的方向搖擺與設(shè)計(jì)反復(fù)。早期的 Rust 版本頻繁推翻語(yǔ)法和特性,幾乎每個(gè)版本都像一門(mén)新語(yǔ)言,學(xué)習(xí)成本極高,社區(qū)難以積累經(jīng)驗(yàn),Mozilla 內(nèi)部也開(kāi)始質(zhì)疑是否有必要繼續(xù)投入資源維護(hù)這樣一個(gè)復(fù)雜而激進(jìn)的項(xiàng)目。2012 到 2014 年間,Rust 迎來(lái)了第一次真正的生存危機(jī),如果繼續(xù)沿著原有路線發(fā)展,它很可能會(huì)就此消失。

真正的轉(zhuǎn)折點(diǎn)發(fā)生在 Rust 團(tuán)隊(duì)對(duì)自身設(shè)計(jì)的深刻反思之中。他們選擇主動(dòng)“剎車(chē)”,凍結(jié)特性,明確以所有權(quán)與借用系統(tǒng)為核心,放棄短期的靈活性與炫技,轉(zhuǎn)而追求長(zhǎng)期的穩(wěn)定性與可維護(hù)性。這一決定雖然讓 Rust 在使用上顯得嚴(yán)格而難學(xué),卻為它奠定了堅(jiān)實(shí)的語(yǔ)言基礎(chǔ)。2015 年 Rust 1.0 正式發(fā)布,語(yǔ)法和語(yǔ)義趨于穩(wěn)定,Rust 才真正意義上“活了下來(lái)”。

然而,Rust 并沒(méi)有在 1.0 發(fā)布后立刻爆發(fā)。相當(dāng)長(zhǎng)一段時(shí)間里,它依然被認(rèn)為學(xué)習(xí)曲線陡峭、編譯緩慢、生態(tài)尚不成熟,更多是工程師欣賞卻不敢在核心業(yè)務(wù)中使用的語(yǔ)言。直到云計(jì)算、大規(guī)模并發(fā)系統(tǒng)和安全問(wèn)題成為現(xiàn)實(shí)壓力,內(nèi)存安全從“錦上添花”變成“剛性需求”,Rust 才迎來(lái)了屬于自己的時(shí)代。

隨著 AWS、Microsoft、Google 等大型公司在關(guān)鍵系統(tǒng)中采用 Rust,Linux 內(nèi)核也開(kāi)始引入 Rust 支持,這門(mén)曾經(jīng)瀕臨失敗的語(yǔ)言逐漸進(jìn)入主流視野?;仡?Rust 的發(fā)展歷史,它并不是贏在起點(diǎn),而是在一次次否定與重構(gòu)中,選擇了最難卻最穩(wěn)的一條路,這也正是 Rust 今天能夠站在系統(tǒng)級(jí)編程舞臺(tái)中央的原因。

好的,該說(shuō)的基本都說(shuō)了,下面就開(kāi)始我們的rust內(nèi)容教學(xué)。

rust環(huán)境安裝

可以去官方下載安裝工具來(lái)安裝rust:rust安裝工具

這里我們選擇x64(一般的筆記本都是這個(gè))。下載完成之后打開(kāi)exe文件

我這里已經(jīng)安裝過(guò)了,沒(méi)有過(guò)程。第一次安裝的話會(huì)自動(dòng)安裝完成,等待即可。

安裝完成之后打開(kāi)cmd控制臺(tái),輸入下面的命令查看rust編譯器版本

成功輸出版本信息,說(shuō)明安裝成功

rust特性和使用場(chǎng)景

Rust 并不是“語(yǔ)法炫技型語(yǔ)言”,它的每一個(gè)設(shè)計(jì),幾乎都圍繞兩個(gè)關(guān)鍵詞:

安全(Safety)性能(Performance)

內(nèi)存安全:內(nèi)存安全是Rust最重要,也是最具代表性的特性,在傳統(tǒng)系統(tǒng)級(jí)語(yǔ)言(c/c++)當(dāng)中,常見(jiàn)的內(nèi)存安全問(wèn)題包括,空指針訪問(wèn),野指針,內(nèi)存泄漏,越界訪問(wèn)等等。rust在編譯期間就通過(guò)“所有權(quán)系統(tǒng)”徹底避免這些問(wèn)題”。

在保證安全的同時(shí),Rust 并沒(méi)有犧牲性能。Rust 的抽象大多是零成本抽象(Zero-cost Abstraction),例如模式匹配、迭代器、泛型和 trait,在編譯后通常會(huì)被優(yōu)化為與手寫(xiě) C 代碼相當(dāng)?shù)臋C(jī)器指令,不引入額外的運(yùn)行時(shí)開(kāi)銷。這使得 Rust 在性能上可以直接對(duì)標(biāo) C / C++,卻大幅降低了出錯(cuò)概率。

Rust 對(duì)并發(fā)安全的關(guān)注同樣體現(xiàn)在語(yǔ)言層面。傳統(tǒng)語(yǔ)言中常見(jiàn)的數(shù)據(jù)競(jìng)爭(zhēng)、競(jìng)態(tài)條件,往往依賴文檔約定或運(yùn)行時(shí)檢查,而 Rust 通過(guò)類型系統(tǒng)和所有權(quán)規(guī)則,將“是否線程安全”變成了編譯期問(wèn)題。Send、Sync 等 trait 明確約束了數(shù)據(jù)能否跨線程傳遞,使得“無(wú)數(shù)據(jù)競(jìng)爭(zhēng)的并發(fā)”成為語(yǔ)言級(jí)別的保證,而非最佳實(shí)踐。

使用場(chǎng)景

正是由于這些特性,Rust 非常適合用于對(duì)安全性和性能要求極高的場(chǎng)景,例如系統(tǒng)軟件、網(wǎng)絡(luò)服務(wù)、云基礎(chǔ)設(shè)施、區(qū)塊鏈、數(shù)據(jù)庫(kù)、瀏覽器內(nèi)核以及操作系統(tǒng)組件等。近年來(lái),Rust 也逐漸進(jìn)入 Web 后端、微服務(wù)和高并發(fā)服務(wù)領(lǐng)域,在保持接近底層性能的同時(shí),顯著提升了系統(tǒng)的穩(wěn)定性和可維護(hù)性。

rust的ide選擇

vscode

VsCode:堪稱編程界萬(wàn)金油編譯器,含金量無(wú)需多言,安裝對(duì)應(yīng)的插件什么代碼都能跑

網(wǎng)站鏈接:vscode下載地址

RustRover

RustRover:jetbrains家出品,必屬精品,專業(yè)rust語(yǔ)言ide,含金量不多說(shuō)了,可以自己找一下破解方法

網(wǎng)站鏈接:RustRover下載

下面我的代碼編寫(xiě)都是以RustRover為例子

rust的重要概念

所有權(quán)系統(tǒng)

每一塊內(nèi)存,都有且只有一個(gè)“主人”。

let s = String::from("hello");
let t = s;        // 所有權(quán)轉(zhuǎn)移(move)

借用(Borrowing)

不擁有,但可以臨時(shí)使用。

fn print_len(s: &String) {
    println!("{}", s.len());
}

Move / Copy 語(yǔ)義

所有權(quán)可以被顯式或隱式轉(zhuǎn)移。

let a = 10;
let b = a;  // Copy

let s1 = String::from("hi");
let s2 = s1; // Move

crate(包)

Rust 的最小編譯單元,可以理解為 “一次被編譯和鏈接的完整代碼包”。

簡(jiǎn)要來(lái)說(shuō):

  • 一個(gè) crate 要么是 庫(kù)(lib crate),要么是 可執(zhí)行程序(binary crate)

  • 編譯時(shí),Rust 以 crate 為單位 進(jìn)行編譯和依賴管理

  • 一個(gè)項(xiàng)目可以包含 多個(gè) crate

  • 對(duì)外暴露的代碼由 crate 的 public API 決定

Proc-macro Crate(過(guò)程宏)

編譯期運(yùn)行的 Rust 程序,用來(lái)“生成 Rust 代碼。它不是在運(yùn)行時(shí)干活,而是在“編譯 Rust 代碼時(shí)”幫你寫(xiě)代碼

  • 本質(zhì)上是一個(gè) 獨(dú)立的 crate

  • 編譯期執(zhí)行

  • 輸入是 Rust 代碼,輸出也是 Rust 代碼

  • 用來(lái)減少樣板代碼、實(shí)現(xiàn)語(yǔ)法級(jí)擴(kuò)展

常見(jiàn)的過(guò)程宏形式包括三種:

  • 派生宏(derive):如 #[derive(Debug)]

  • 屬性宏(attribute):如 #[route("/hello")]

  • 函數(shù)式宏(function-like):如 sql!(...)

Cargo

Cargo 是 Rust 的官方構(gòu)建工具和包管理器,可以把它理解為 Rust 世界里的“項(xiàng)目管家 + 構(gòu)建系統(tǒng) + 依賴管理器”,幾乎所有現(xiàn)代 Rust 項(xiàng)目都離不開(kāi)它。

Cargo 的核心配置文件是 Cargo.toml,它描述了一個(gè) Rust 項(xiàng)目的“身份信息”和“依賴關(guān)系”,包括項(xiàng)目名、版本、使用的 Rust 版本、依賴的第三方庫(kù)(crate)以及構(gòu)建配置。Cargo 會(huì)根據(jù)這個(gè)文件自動(dòng)下載依賴、解析版本、處理編譯順序。

rust變量類型

Rust 是強(qiáng)類型 + 靜態(tài)類型語(yǔ)言,變量的類型在編譯期就必須確定

整數(shù)類型(Integer)

類型位數(shù)說(shuō)明
i8 / i16 / i32 / i64 / i128有符號(hào)常用 i32
u8 / u16 / u32 / u64 / u128無(wú)符號(hào)
isize / usize與平臺(tái)相關(guān)
let a: i32 = -10;
let b: u64 = 100;
let idx: usize = 5;

浮點(diǎn)類型(Floating-point)

類型位數(shù)
f32單精度
f64雙精度(默認(rèn))
let pi: f64 = 3.14159;

布爾類型(Boolean)

let ok: bool = true;

字符類型(char)

  • Unicode 字符

  • 4 字節(jié)

let c: char = '中';
let emoji: char = '??';

元組(Tuple)

  • 不同類型的組合

  • 定長(zhǎng)

let tup: (i32, f64, char) = (1, 2.0, 'a');

let (x, y, z) = tup;

數(shù)組(Array)

  • 相同類型

  • 定長(zhǎng)

  • 存在棧上

let arr: [i32; 3] = [1, 2, 3];

切片(Slice)

  • 對(duì)數(shù)組或集合的引用

  • 動(dòng)態(tài)長(zhǎng)度

let slice: &[i32] = &arr[0..2];

rust基礎(chǔ)語(yǔ)法

第一行代碼Hello world

fn main() {
    println!("Hello, world!");
}

變量聲明(let / mut)

let x = 10;        // 不可變(默認(rèn))
let mut y = 20;   // 可變
y += 1;

if 條件判斷(沒(méi)有三元運(yùn)算符)

let n = 10;

if n > 0 {
    println!("positive");
} else if n == 0 {
    println!("zero");
} else {
    println!("negative");
}

for 循環(huán)

for i in 0..5 {
    println!("{}", i); // 0 ~ 4
}

包含右邊界

for i in 0..=5 {
    println!("{}", i); // 0 ~ 5
}

while 循環(huán)

let mut i = 0;

while i < 5 {
    println!("{}", i);
    i += 1;
}

loop 無(wú)限循環(huán)

let mut i = 0;

loop {
    if i == 5 {
        break;
    }
    i += 1;
}

loop需要返回值時(shí)

let result = loop {
    if i > 10 {
        break i * 2;
    }
    i += 1;
};

match 判斷

Rust沒(méi)有switch的設(shè)計(jì),使用match代替

let n = 2;

match n {
    1 => println!("one"),
    2 => println!("two"),
    3 => println!("three"),
    _ => println!("other"),
}

if let(簡(jiǎn)化match)

let x = Some(5);

if let Some(v) = x {
    println!("{}", v);
}

break / continue

for i in 0..10 {
    if i == 3 {
        continue;
    }
    if i == 7 {
        break;
    }
    println!("{}", i);
}

函數(shù)定義

rust的函數(shù)定義上和go挺像的,fn 函數(shù)名稱(入?yún)ⅲ侯愋停?>返回類型。細(xì)節(jié)是最后一行返回內(nèi)容時(shí)不需要分號(hào)。

fn add(a: i32, b: i32) -> i32 {
    a + b   // 最后一行是返回值(無(wú)分號(hào))
}

注釋

rust的注釋和其他語(yǔ)言沒(méi)什么區(qū)別,不多介紹了

// 單行注釋

/*
   多行注釋
*/

/// 文檔注釋(用于生成文檔)

rust高級(jí)語(yǔ)法

下面則是深入一個(gè)rust的重要設(shè)計(jì)和概念,以下內(nèi)容難度相對(duì)比較高和抽象,希望大家都不要放棄。

生命周期

生命周期是 Rust 用來(lái)描述**引用“活多久”**的機(jī)制,它并不影響運(yùn)行時(shí)行為,而是完全服務(wù)于編譯期檢查。通過(guò)生命周期,Rust 可以在不使用垃圾回收的前提下,確保引用永遠(yuǎn)不會(huì)懸垂。生命周期的本質(zhì)不是“讓你寫(xiě)更多標(biāo)注”,而是把“對(duì)象之間的依賴關(guān)系”顯式地交給編譯器驗(yàn)證。

代碼示例:

// 'a 表示 x、y 和返回值共享同一個(gè)生命周期
fn longest<'a>(x: &'a str, y: &'a str) -> &'a str {
    // 返回的引用一定來(lái)自 x 或 y
    if x.len() > y.len() { x } else { y }
}

fn main() {
    let a = String::from("hello");
    let b = String::from("rust");

    // &a、&b 的生命周期都覆蓋了 longest 的返回值
    println!("{}", longest(&a, &b));
}

閉包和迭代器

Rust 對(duì)函數(shù)式編程的支持體現(xiàn)在閉包和迭代器上。閉包可以捕獲環(huán)境,并根據(jù)捕獲方式自動(dòng)推導(dǎo) Fn、FnMut、FnOnce,而迭代器則通過(guò)惰性求值和組合操作,提供了極高的表達(dá)力。這些抽象在編譯期會(huì)被完全優(yōu)化,不引入額外運(yùn)行時(shí)成本,是 Rust “零成本抽象”理念的典型體現(xiàn)。

示例如下

// 'a 表示 x、y 和返回值共享同一個(gè)生命周期
fn longest<'a>(x: &'a str, y: &'a str) -> &'a str {
    // 返回的引用一定來(lái)自 x 或 y
    if x.len() > y.len() { x } else { y }
}

fn main() {
    let a = String::from("hello");
    let b = String::from("rust");

    // &a、&b 的生命周期都覆蓋了 longest 的返回值
    println!("{}", longest(&a, &b));
}

循環(huán)引用和自引用

在引入引用計(jì)數(shù)(如 Rc / Arc)后,循環(huán)引用成為一個(gè)必須正視的問(wèn)題。Rust 并不會(huì)自動(dòng)替你處理這些情況,而是通過(guò) Weak 指針等機(jī)制,讓開(kāi)發(fā)者顯式打破引用環(huán)。同時(shí),自引用結(jié)構(gòu)在 Rust 中也是一個(gè)典型的高級(jí)難點(diǎn),需要借助 Pin 等機(jī)制來(lái)保證內(nèi)存地址的穩(wěn)定性。

代碼示例:

use std::rc::{Rc, Weak};
use std::cell::RefCell;

struct Node {
    next: RefCell<Option<Rc<Node>>>,   // 強(qiáng)引用:擁有所有權(quán)
    prev: RefCell<Option<Weak<Node>>>, // 弱引用:不增加計(jì)數(shù)
}

fn main() {
    let a = Rc::new(Node {
        next: RefCell::new(None),
        prev: RefCell::new(None),
    });

    let b = Rc::new(Node {
        next: RefCell::new(None),
        // Weak 用于防止 a <-> b 循環(huán)引用
        prev: RefCell::new(Some(Rc::downgrade(&a))),
    });

    // a 強(qiáng)引用 b,但 b 不強(qiáng)引用 a
    *a.next.borrow_mut() = Some(b);
}

多線程并發(fā)模型

Rust 的并發(fā)模型建立在“編譯期無(wú)數(shù)據(jù)競(jìng)爭(zhēng)”之上。通過(guò) Send、Sync 以及所有權(quán)規(guī)則,Rust 能在編譯階段阻止絕大多數(shù)并發(fā)錯(cuò)誤。Mutex、RwLock、Channel 等并發(fā)工具在 Rust 中并不神秘,但它們的安全使用是由類型系統(tǒng)強(qiáng)制保障的,而不是依賴約定

代碼示例:

use std::sync::{Arc, Mutex};
use std::thread;

fn main() {
    // Arc:線程安全的引用計(jì)數(shù)
    // Mutex:保證同一時(shí)間只有一個(gè)線程修改數(shù)據(jù)
    let counter = Arc::new(Mutex::new(0));
    let mut handles = vec![];

    for _ in 0..5 {
        let c = Arc::clone(&counter);
        handles.push(thread::spawn(move || {
            // lock() 返回互斥鎖,作用域結(jié)束自動(dòng)釋放
            *c.lock().unwrap() += 1;
        }));
    }

    for h in handles {
        h.join().unwrap();
    }

    println!("{}", *counter.lock().unwrap());
}

Macro 宏編程

Rust 的宏是編譯期代碼生成工具,分為聲明宏和過(guò)程宏。宏并不是語(yǔ)法糖,而是一種元編程能力,可以用來(lái)減少重復(fù)代碼、擴(kuò)展語(yǔ)言表達(dá)能力,甚至構(gòu)建領(lǐng)域?qū)S谜Z(yǔ)言(DSL)。許多 Rust 生態(tài)中的“魔法”,本質(zhì)都來(lái)自宏。

代碼示例:

// 聲明宏:在編譯期展開(kāi)代碼
macro_rules! say_hello {
    ($name:expr) => {
        println!("Hello, {}", $name);
    };
}

fn main() {
    // 這里不是函數(shù)調(diào)用,而是宏展開(kāi)
    say_hello!("Rust");
}

async / await 異步編程

Rust 的異步模型是基于 Future 的零成本抽象,async/await 只是語(yǔ)法層面的簡(jiǎn)化。不同于依賴運(yùn)行時(shí)調(diào)度的語(yǔ)言,Rust 將異步狀態(tài)機(jī)編譯成顯式結(jié)構(gòu),由執(zhí)行器驅(qū)動(dòng)運(yùn)行。這使得 Rust 在高并發(fā)場(chǎng)景下既高效又可控。

代碼如下:

// async fn 會(huì)被編譯成一個(gè)實(shí)現(xiàn)了 Future 的狀態(tài)機(jī)
async fn hello() -> i32 {
    42
}

#[tokio::main] // 啟動(dòng)異步執(zhí)行器
async fn main() {
    // await 驅(qū)動(dòng) Future 運(yùn)行,直到完成
    let v = hello().await;
    println!("{}", v);
}

錯(cuò)誤處理

Rust 采用 ResultOption 作為核心錯(cuò)誤處理機(jī)制,避免了異常帶來(lái)的隱式控制流。通過(guò) ? 運(yùn)算符,錯(cuò)誤可以在保持代碼簡(jiǎn)潔的同時(shí)被顯式傳播。錯(cuò)誤在 Rust 中是一等公民,而不是運(yùn)行時(shí)的“意外情況”。

fn parse_num(s: &str) -> Result<i32, std::num::ParseIntError> {
    // ?:成功則解包,失敗則立刻返回 Err
    let n = s.parse::<i32>()?;
    Ok(n * 2)
}

fn main() {
    match parse_num("10") {
        Ok(v) => println!("{}", v),
        Err(e) => println!("error: {}", e),
    }
}

rust生態(tài)框架

后端框架

Actix-web

Actix-web 是一個(gè)高性能、偏底層控制的 Rust 后端 Web 框架,以性能著稱,內(nèi)部基于 Actor 模型,在高并發(fā)場(chǎng)景下非常強(qiáng)

use actix_web::{get, App, HttpServer, Responder};

#[get("/hello")]
async fn hello() -> impl Responder {
    "Hello Actix-web"
}

#[actix_web::main]
async fn main() -> std::io::Result<()> {
    HttpServer::new(|| {
        App::new()
            .service(hello)
    })
    .bind(("127.0.0.1", 8080))?
    .run()
    .await
}

Axum

Axum 是一個(gè)基于 Tokio + Tower 的現(xiàn)代 Rust Web 框架,強(qiáng)調(diào)類型安全、組合式設(shè)計(jì),API 非常“Rust 風(fēng)格”。

use axum::{routing::get, Router};

async fn hello() -> &'static str {
    "Hello Axum"
}

#[tokio::main]
async fn main() {
    let app = Router::new()
        .route("/hello", get(hello));

    axum::Server::bind(&"127.0.0.1:8080".parse().unwrap())
        .serve(app.into_make_service())
        .await
        .unwrap();
}

數(shù)據(jù)庫(kù)框架

Diesel

github地址:https://github.com/diesel-rs/diesel

Diesel 是 Rust 中最成熟的 ORM 框架,主打 編譯期 SQL 校驗(yàn)強(qiáng)類型映射,非常安全,但使用成本較高。

代碼示例:

use diesel::prelude::*;

#[derive(Queryable)]
struct User {
    id: i32,
    name: String,
}

let results = users
    .limit(10)
    .load::<User>(&mut conn)?;

SeaORM

github地址:SeaQL/sea-orm: ?? A powerful relational ORM for Rust

SeaORM 是新一代異步 ORM,在“類型安全”和“開(kāi)發(fā)效率”之間做了平衡。

適合場(chǎng)景

  • CRUD 密集型業(yè)務(wù)

  • 快速開(kāi)發(fā)

代碼示例:

let users = User::find()
    .limit(10)
    .all(&db)
    .await?;

緩存

Redis

Redis 是 Rust 中最常用的分布式緩存方案,官方社區(qū)最成熟的客戶端是 redis(也叫 redis-rs)

use redis::AsyncCommands;

let client = redis::Client::open("redis://127.0.0.1/")?;
let mut conn = client.get_async_connection().await?;

conn.set("key", "value").await?;
let val: String = conn.get("key").await?;

本地緩存(moka)

Moka 是 Rust 非常流行的高性能本地緩存庫(kù),支持并發(fā)、TTL、LRU。

use moka::sync::Cache;

let cache = Cache::new(10_000);

cache.insert("key", "value");
let v = cache.get(&"key");

消息隊(duì)列

Kafka

rdkafka 是 Rust 中最主流的 Kafka 客戶端,基于 C 庫(kù) librdkafka,性能和穩(wěn)定性非常強(qiáng)。

use rdkafka::producer::{FutureProducer, FutureRecord};

let producer: FutureProducer = config.create()?;

producer.send(
    FutureRecord::to("topic")
        .payload("hello kafka")
        .key("key"),
    Duration::from_secs(0),
).await?;

NATS

NATS 是輕量級(jí)、高性能消息系統(tǒng),在 Rust 微服務(wù)中非常常見(jiàn)。

let client = async_nats::connect("localhost").await?;
client.publish("subject", "hello").await?;

API網(wǎng)關(guān)

Tower

Tower 是 Rust 服務(wù)生態(tài)的中間件標(biāo)準(zhǔn),提供限流、超時(shí)、重試、熔斷等能力,是很多網(wǎng)關(guān)方案的基礎(chǔ)。

use tower::{ServiceBuilder};
use tower_http::trace::TraceLayer;

let service = ServiceBuilder::new()
    .layer(TraceLayer::new_for_http())
    .service(my_service);

Hyper

Hyper 是 Rust 最底層、最高性能的 HTTP 庫(kù),Axum、Tower 等都構(gòu)建在它之上。

use hyper::{Body, Request, Response};

async fn handler(_: Request<Body>) -> Response<Body> {
    Response::new(Body::from("Hello Gateway"))
}

日志

Rust 的日志體系是 分層設(shè)計(jì),靈活但需要理解一次。

tracing

tracing 是 Rust 新一代結(jié)構(gòu)化日志與鏈路追蹤框架,特別適合微服務(wù)。

use tracing::info;

info!(user_id = 42, "request received");

tracing + tower_http

在 Web / 網(wǎng)關(guān)項(xiàng)目中,常見(jiàn)組合是

  • 自動(dòng)記錄請(qǐng)求日志

  • 支持鏈路追蹤

  • 易于接入 OpenTelemetry

use tower_http::trace::TraceLayer;

let app = Router::new()
    .layer(TraceLayer::new_for_http());

一些學(xué)習(xí)rust語(yǔ)言的網(wǎng)站:


Rust 圣經(jīng)(目前最好的rust教學(xué))

菜鳥(niǎo)教程 rust

rust程序設(shè)計(jì)課程語(yǔ)言

總結(jié)

Rust 并不是一門(mén)“輕松上手”的語(yǔ)言,它對(duì)學(xué)習(xí)者的要求明顯高于許多現(xiàn)代編程語(yǔ)言。初學(xué) Rust 時(shí),你需要花大量精力去理解所有權(quán)、借用、生命周期以及類型系統(tǒng),這些概念并非語(yǔ)法技巧,而是 Rust 對(duì)程序正確性和安全性的根本約束。很多在其他語(yǔ)言中可以“先跑起來(lái)再說(shuō)”的寫(xiě)法,在 Rust 中必須一開(kāi)始就想清楚,這會(huì)讓人感到挫敗,也常常產(chǎn)生“寫(xiě)代碼像在和編譯器較勁”的感覺(jué)。

但正是這種看似嚴(yán)苛的學(xué)習(xí)過(guò)程,構(gòu)成了 Rust 最核心的價(jià)值。Rust 把大量原本在運(yùn)行時(shí)、線上環(huán)境中才會(huì)暴露的問(wèn)題,提前到了編譯期解決。學(xué)習(xí) Rust,實(shí)際上是在被迫建立一種更嚴(yán)謹(jǐn)?shù)墓こ趟季S:清楚數(shù)據(jù)的生命周期、明確所有權(quán)邊界、對(duì)并發(fā)和資源管理保持敬畏。這些能力一旦形成,不僅會(huì)讓你寫(xiě)出更可靠的 Rust 代碼,也會(huì)反過(guò)來(lái)提升你在其他語(yǔ)言中的代碼質(zhì)量。

因此,學(xué)習(xí) Rust 更像是一種“長(zhǎng)期投資”。前期進(jìn)度可能緩慢,甚至?xí)岩赏度胧欠裰档茫S著理解逐漸加深,你會(huì)發(fā)現(xiàn)代碼變得更可控、系統(tǒng)更穩(wěn)定、問(wèn)題更早暴露。Rust 不承諾讓你寫(xiě)得更快,但它承諾讓你在復(fù)雜系統(tǒng)中犯更少的錯(cuò)。對(duì)于愿意投入時(shí)間、耐心和思考深度的開(kāi)發(fā)者來(lái)說(shuō),這份努力最終會(huì)轉(zhuǎn)化為扎實(shí)而持久的工程能力。

以上就是所有rust教學(xué)的內(nèi)容,希望這篇文章能幫到每一個(gè)正在學(xué)習(xí)rust的朋友。如果這篇文章對(duì)你們有幫助,可以點(diǎn)贊,收藏加關(guān)注一下。你們的支持是我更新的最大動(dòng)力

到此這篇關(guān)于新手輕松入門(mén)rus學(xué)習(xí)t語(yǔ)言(基礎(chǔ)、高級(jí)語(yǔ)法和生態(tài)框架)的文章就介紹到這了,更多相關(guān)rust語(yǔ)言學(xué)習(xí)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 深入了解Rust中的枚舉和模式匹配

    深入了解Rust中的枚舉和模式匹配

    這篇文章主要為大家詳細(xì)介紹了Rust中的枚舉和模式匹配的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-01-01
  • Rust 中的閉包之捕獲環(huán)境的匿名函數(shù)

    Rust 中的閉包之捕獲環(huán)境的匿名函數(shù)

    這篇文章介紹了Rust編程語(yǔ)言中的閉包,包括閉包的定義、使用、捕獲環(huán)境中的變量、類型推斷與注解、與函數(shù)的比較以及實(shí)際應(yīng)用,閉包具有捕獲環(huán)境、類型推斷和高效性等特性,是Rust中一個(gè)非常強(qiáng)大的工具,感興趣的朋友一起看看吧
    2025-02-02
  • Rust使用libloader調(diào)用動(dòng)態(tài)鏈接庫(kù)

    Rust使用libloader調(diào)用動(dòng)態(tài)鏈接庫(kù)

    這篇文章主要為大家介紹了Rust使用libloader調(diào)用動(dòng)態(tài)鏈接庫(kù)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • Rust初體驗(yàn):手把手教你構(gòu)建‘Hello,?World!’

    Rust初體驗(yàn):手把手教你構(gòu)建‘Hello,?World!’

    "準(zhǔn)備好了嗎?一起踏上Rust編程語(yǔ)言的精彩旅程!在這篇「Rust初體驗(yàn)」中,我們將手把手教你構(gòu)建經(jīng)典程序“Hello,?World!”,感受Rust的強(qiáng)大與安全,短短幾行代碼,就能讓你對(duì)這個(gè)系統(tǒng)級(jí)語(yǔ)言的魅力一探究竟!快加入吧,驚喜等你發(fā)現(xiàn)!"
    2024-01-01
  • Rust安裝的圖文教程

    Rust安裝的圖文教程

    本文主要介紹了Rust安裝的圖文教程,文中通過(guò)圖文示例介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2025-06-06
  • 為什么要選Rust?學(xué)習(xí)Rust從零開(kāi)始配置和實(shí)現(xiàn)第一個(gè)簡(jiǎn)單項(xiàng)目

    為什么要選Rust?學(xué)習(xí)Rust從零開(kāi)始配置和實(shí)現(xiàn)第一個(gè)簡(jiǎn)單項(xiàng)目

    本文介紹了Rust語(yǔ)言的核心價(jià)值、應(yīng)用場(chǎng)景、開(kāi)發(fā)環(huán)境搭建、第一個(gè)Rust項(xiàng)目的創(chuàng)建與擴(kuò)展、調(diào)試、發(fā)布流程,以及新手常見(jiàn)陷阱與避坑方法,通過(guò)學(xué)習(xí)Rust,開(kāi)發(fā)者可以實(shí)現(xiàn)高效且安全的系統(tǒng)級(jí)開(kāi)發(fā)、網(wǎng)絡(luò)編程和工具開(kāi)發(fā)
    2026-01-01
  • Rust如何使用Sauron實(shí)現(xiàn)Web界面交互

    Rust如何使用Sauron實(shí)現(xiàn)Web界面交互

    Sauron?是一個(gè)多功能的?Web?框架和庫(kù),用于構(gòu)建客戶端和/或服務(wù)器端?Web?應(yīng)用程序,重點(diǎn)關(guān)注人體工程學(xué)、簡(jiǎn)單性和優(yōu)雅性,這篇文章主要介紹了Rust使用Sauron實(shí)現(xiàn)Web界面交互,需要的朋友可以參考下
    2024-03-03
  • Go調(diào)用Rust方法及外部函數(shù)接口前置

    Go調(diào)用Rust方法及外部函數(shù)接口前置

    這篇文章主要為大家介紹了Go調(diào)用Rust方法及外部函數(shù)接口前置示例實(shí)現(xiàn),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • Rust?Atomics?and?Locks內(nèi)存序Memory?Ordering詳解

    Rust?Atomics?and?Locks內(nèi)存序Memory?Ordering詳解

    這篇文章主要為大家介紹了Rust?Atomics?and?Locks內(nèi)存序Memory?Ordering詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • Rust遍歷 BinaryHeap的示例代碼

    Rust遍歷 BinaryHeap的示例代碼

    Rust 的 BinaryHeap 結(jié)構(gòu)體實(shí)現(xiàn)了迭代器接口,因此你可以遍歷它,如果你想要遍歷 BinaryHeap 中的所有元素,你可以使用 .into_iter() 方法將其轉(zhuǎn)換為迭代器,并遍歷其中的元素,本文通過(guò)實(shí)例介紹Rust遍歷 BinaryHeap的相關(guān)知識(shí),感興趣的朋友一起看看吧
    2024-04-04

最新評(píng)論

乌兰浩特市| 静安区| 枣庄市| 桐乡市| 阜康市| 吉首市| 镇原县| 昭平县| 无极县| 台山市| 昭觉县| 平泉县| 青州市| 京山县| 临澧县| 陇川县| 蒲城县| 沾益县| 楚雄市| 白玉县| 渝北区| 清丰县| 沭阳县| 阿城市| 鸡西市| 建昌县| 中西区| 房产| 吴旗县| 海口市| 顺昌县| 白河县| 贵州省| 昌乐县| 门源| 班戈县| 襄樊市| 汤原县| 正宁县| 舞钢市| 屏东县|