⚡ 以範例驅動學習
🦀 支援暗色 / 亮色模式
📚 單頁式教學展示
開始學習
🦀 Rust 中文教學網站

從入門到Rust編程語言的專家

專業的Rust繁體中文教學及練習範例網站,提供豐富的Rust線上教學及自學資源,包括Rust語法、Rust語言基礎入門、Rust遊戲教學、Rust應用、Rust IDE,及多個Rust教學課程推薦!

10+ 教學模組
20+ Rust 範例片段
4 互動功能區塊
main.rs
Rust
fn main() {
    let language = "Rust";
    let version = 2026;
    println!("歡迎來到 {} 繁中教學站!", language);
    println!("學習重點:所有權、型別、錯誤處理、Trait");
    println!("現在開始建立你的第一個高效安全程式吧!");
}

學習路線圖

從入門語法到能開發完整專案的推薦順序

Step 1|認識 Rust 與環境建置

理解 Rust 的定位:安全、速度、無 GC 的系統程式語言,並熟悉 rustup、cargo、rustc 的基本使用。

Step 2|變數、型別、函式、流程控制

建立所有語言都會用到的核心概念,像是變數、基本型別、函式、if / loop / while / for。

Step 3|所有權、借用、切片

掌握 Rust 與眾不同的記憶體安全模型,這是初學者進入中階的重要分水嶺。

Step 4|Struct、Enum、match、集合

開始寫出較具結構性的程式,把資料與行為組織起來。

Step 5|Result、Option、泛型、Trait、模組化

逐步進入工程實作階段,建立可維護、可重複使用的程式碼。

這個網站版本比一般教學頁更完整的地方

除了章節導覽,也加入更多專業 UI 與擴充功能介面

UI 升級

專業級視覺與玻璃擬態面板

比傳統教學網站更有產品感,適合拿來做課程平台、招生頁、知識產品或團隊內訓入口。

互動體驗

主題切換、章節搜尋、複製程式碼

強化使用者操作體驗,讓學習者更容易快速定位內容與重複練習範例。

教學設計

導覽式課綱 + 實作導向範例

同時結合章節式學習與範例驅動兩種節奏,既適合初學者也能支援中階複習。

變數與基本型別

先建立 Rust 最核心的語法與型別概念

變數與可變性
fn main() {
    let name = "Rust";
    let mut score = 60;

    println!("語言:{}", name);
    println!("初始分數:{}", score);

    score = 90;
    println!("更新後分數:{}", score);
}
重點

let 預設不可變,若需要修改變數內容,必須加上 mut。這能讓程式邏輯更清楚,也能降低意外修改資料的風險。

常數
const MAX_USERS: u32 = 100;

fn main() {
    println!("系統最多可容納 {} 位使用者", MAX_USERS);
}
重點

常數使用 const 宣告,名稱習慣全大寫,且型別必須明確標示。

整數與浮點數

i32u32f64 是最常見的基礎數值型別。

布林與字元

bool 用於真假值,char 表示單一 Unicode 字元。

Tuple

用於組合多個不同型別的值,例如座標、狀態組合。

Array

固定長度、同質型別,常用於高效處理已知大小的資料。

函式與控制流程

把邏輯拆成可重用單元,並學會條件與迴圈控制

函式
fn add(a: i32, b: i32) -> i32 {
    a + b
}

fn main() {
    let result = add(8, 12);
    println!("結果:{}", result);
}
for 迴圈
fn main() {
    let nums = [10, 20, 30];

    for n in nums {
        println!("目前值:{}", n);
    }
}

表達式導向

Rust 的區塊可以回傳值,因此很多地方不需要寫 return,最後一行表達式本身就能成為結果。

常見流程控制

你會很常使用 ifloopwhilefor,其中 for 特別適合安全地走訪集合。

所有權、借用與切片

這是 Rust 安全性的核心,也是與其他語言最不一樣的地方

所有權移動
fn main() {
    let s1 = String::from("hello");
    let s2 = s1;

    // println!("{}", s1); // 這行會報錯,因為所有權已移動到 s2
    println!("{}", s2);
}
借用
fn print_len(text: &String) {
    println!("長度:{}", text.len());
}

fn main() {
    let msg = String::from("Rustacean");
    print_len(&msg);
    println!("原字串仍可使用:{}", msg);
}
一口氣記住三件事

每個值同一時間只能有一個 owner;借用分為不可變借用與可變借用;編譯器會幫你在編譯期擋掉常見的記憶體錯誤。

Struct、Enum 與模式比對

建立更真實的資料模型,並用 match 寫出可讀性很高的邏輯

Struct
struct User {
    username: String,
    active: bool,
}

fn main() {
    let user = User {
        username: String::from("Alice"),
        active: true,
    };

    println!("{} 是否啟用:{}", user.username, user.active);
}
Enum + match
enum TrafficLight {
    Red,
    Yellow,
    Green,
}

fn action(light: TrafficLight) {
    match light {
        TrafficLight::Red => println!("停止"),
        TrafficLight::Yellow => println!("準備"),
        TrafficLight::Green => println!("前進"),
    }
}

fn main() {
    action(TrafficLight::Green);
}

集合、字串與實用標準庫

這些會讓你開始寫出更貼近實際需求的程式

Vector

可變長度陣列,適合動態收集資料,是最常用的集合型別之一。

String

Rust 字串涉及 UTF-8 與所有權概念,初學者很值得多做練習。

HashMap

鍵值對資料結構,非常適合做索引、統計與查表功能。

HashMap 範例
use std::collections::HashMap;

fn main() {
    let mut scores = HashMap::new();
    scores.insert("Alice", 95);
    scores.insert("Bob", 88);

    if let Some(score) = scores.get("Alice") {
        println!("Alice 的分數是 {}", score);
    }
}

錯誤處理:Option 與 Result

Rust 鼓勵你顯式處理失敗情境,而不是把錯誤藏起來

Option
fn find_even(nums: &[i32]) -> Option {
    for n in nums {
        if n % 2 == 0 {
            return Some(*n);
        }
    }
    None
}

fn main() {
    let nums = [1, 3, 7, 8];
    match find_even(&nums) {
        Some(n) => println!("找到偶數:{}", n),
        None => println!("沒有偶數"),
    }
}
Result
fn divide(a: f64, b: f64) -> Result {
    if b == 0.0 {
        Err(String::from("除數不能為 0"))
    } else {
        Ok(a / b)
    }
}

fn main() {
    match divide(10.0, 2.0) {
        Ok(v) => println!("答案:{}", v),
        Err(msg) => println!("錯誤:{}", msg),
    }
}

泛型與 Trait

學會寫出通用又可擴充的程式碼,是進入 Rust 工程實戰的重要一步

泛型函式
fn largest(list: &[T]) -> T {
    let mut largest = list[0];
    for &item in list {
        if item > largest {
            largest = item;
        }
    }
    largest
}

fn main() {
    let nums = [3, 9, 2, 15, 6];
    println!("最大值:{}", largest(&nums));
}
Trait
trait Summary {
    fn summarize(&self) -> String;
}

struct Post {
    title: String,
}

impl Summary for Post {
    fn summarize(&self) -> String {
        format!("文章標題:{}", self.title)
    }
}

fn main() {
    let p = Post { title: String::from("學 Rust 超值得") };
    println!("{}", p.summarize());
}

Cargo、模組化與專案思維

Rust 不只是語法,真正的開發體驗也來自完整工具鏈

功能 用途 常用指令 / 觀念
Cargo 建立、執行、測試、發佈專案 cargo newcargo runcargo test
Crate Rust 的編譯單位,可分為 binary 與 library 了解 src/main.rssrc/lib.rs
Module 組織大型程式碼 moduse、檔案拆分

範例實驗室

你可以把這一區後續串接成真正的線上編輯器或嵌入 Playground

範例 1|猜數字遊戲邏輯雛形

可延伸成完整 CLI 小專案,加入亂數、輸入檢查與回合控制。

Mini Project
fn check_guess(secret: i32, guess: i32) {
    if guess < secret {
        println!("太小了");
    } else if guess > secret {
        println!("太大了");
    } else {
        println!("猜中了!");
    }
}

fn main() {
    check_guess(42, 36);
}

範例 2|字串處理

很適合用來教初學者理解 UTF-8、所有權與不可變借用。

String
fn main() {
    let sentence = String::from("hello rust world");
    for word in sentence.split_whitespace() {
        println!("單字:{}", word);
    }
}

快速小測驗

示範前端互動,可再擴充成完整題庫系統

哪一個關鍵字可讓變數變成可變?

請點選一個答案。

FAQ 與常見錯誤

幫助初學者快速理解 Rust 最容易卡住的地方

為什麼我把 String 指派給另一個變數後,原本的變數不能用了?

因為 Rust 預設會發生所有權移動。像 String 這類配置在 heap 的型別,賦值時不是簡單複製資料本體,而是轉移所有權,避免重複釋放同一塊記憶體。

borrow 與 reference 是一樣的嗎?

通常在 Rust 教學脈絡裡,借用是概念,reference 是語法載體。你透過 &T&mut T 建立參考,也就是借用值來使用它。

我什麼時候該用 Result,什麼時候該用 Option?

如果只是「有值 / 沒值」,用 Option;如果你需要知道失敗原因,則使用 Result 更合適。