From 6a13c1db10551aecc42e71b466de01815427e98b Mon Sep 17 00:00:00 2001 From: TaurusXin Date: Sun, 5 Jan 2025 23:31:43 +0800 Subject: [PATCH] fix: 084; feat: 086, 086 --- content/post/082.rust-01/index.md | 12 +- content/post/083.rust-02/index.md | 14 +- .../{084.rust-04 => 084.rust-03}/index.md | 0 content/post/085.rust-04/index.md | 94 +++++++++++ content/post/086.rust-05/index.md | 159 ++++++++++++++++++ 5 files changed, 266 insertions(+), 13 deletions(-) rename content/post/{084.rust-04 => 084.rust-03}/index.md (100%) create mode 100644 content/post/085.rust-04/index.md create mode 100644 content/post/086.rust-05/index.md diff --git a/content/post/082.rust-01/index.md b/content/post/082.rust-01/index.md index 149cd1d..71b81b9 100644 --- a/content/post/082.rust-01/index.md +++ b/content/post/082.rust-01/index.md @@ -7,19 +7,19 @@ slug: "rust-tutorial-01" date: "2024-12-30T01:20:00+0800" --- -## 视频 +## Bilibili {{< bilibili BV1BG6eYPE7L >}} 建议前往 B 站观看哦! -## 课程笔记 +--- -### Rust 简介 +## Rust 简介 **Rust** 是一门注重 **内存安全** 和 **高性能** 的系统编程语言,通过所有权机制避免常见的内存错误。自 **2021 年 Linux 内核 5.13 版本**起,Rust 被正式引入,用于提高内核模块(如驱动程序)的安全性,减少内存管理漏洞。目前,Rust 在内核中的应用仍处于初期阶段,未来可能会逐步扩大。 -### 安装 +## 安装 - 官方网站: @@ -29,7 +29,7 @@ date: "2024-12-30T01:20:00+0800" brew install rust ``` -### HelloWorld +## HelloWorld ```rust fn main() { @@ -37,7 +37,7 @@ fn main() { } ``` -### Hello Cargo +## Hello Cargo 建立 cargo 项目 diff --git a/content/post/083.rust-02/index.md b/content/post/083.rust-02/index.md index cf55735..18bd3d1 100644 --- a/content/post/083.rust-02/index.md +++ b/content/post/083.rust-02/index.md @@ -7,23 +7,23 @@ slug: "rust-tutorial-02" date: "2024-12-30T16:34:00+0800" --- -## 视频 +## Bilibili {{< bilibili BV1ZX63YqEFa >}} 建议前往 B 站观看哦! -## 课程笔记 +--- -### 使用 RustRover +## 使用 RustRover RustRover 是 JetBrains 专为 Rust 语言开发的独立 IDE,致力于提供专业的 Rust 开发环境。RustRover 源自多年来在 JetBrains IDE 中的 Rust 插件支持经验,具备完整的 Rust 功能支持,包括深度学习驱动的全行代码补全、改进的 Cargo 管理、强大的调试工具和数据库支持等功能,旨在优化开发者的 Rust 工作流。 RustRover 引入了灵活的许可模式:个人非商业用途可以免费使用,而商业用途则需购买付费许可。这种模式允许独立开发者免费使用专业级的 Rust 开发环境。此外,RustRover 还能与 JetBrains 的其他工具无缝集成,便于协作和版本控制,是适合团队和个人项目的理想选择。 -### 变量声明与可变性 +## 变量声明与可变性 -#### 变量声明的差异 +### 变量声明的差异 在 Go 中,我们使用 `var` 关键字或 `:=` 简写来声明变量: @@ -45,7 +45,7 @@ let name = "Rust"; let mut age = 42; ``` -#### 变量重影(Shadowing) +### 变量重影(Shadowing) Rust 独特的特性之一是允许变量重影: @@ -69,7 +69,7 @@ let text = "hello"; let text = text.len(); // 从字符串变为数字 ``` -#### 实践建议 +## 实践建议 作为 Go 开发者,需要特别注意: diff --git a/content/post/084.rust-04/index.md b/content/post/084.rust-03/index.md similarity index 100% rename from content/post/084.rust-04/index.md rename to content/post/084.rust-03/index.md diff --git a/content/post/085.rust-04/index.md b/content/post/085.rust-04/index.md new file mode 100644 index 0000000..8c82b29 --- /dev/null +++ b/content/post/085.rust-04/index.md @@ -0,0 +1,94 @@ +--- +title: "给 Golang 开发者的 Rust 私房菜 04 函数、表达式和语句" +categories: [ "Rust" ] +tags: [ "rust" ] +draft: false +slug: "rust-tutorial-04" +date: "2025-01-05T22:45:00+0800" +--- + +## Bilibili + +{{< bilibili BV1TVrTYCESM >}} + +建议前往 B 站观看哦! + +--- + +## 函数 + +### 定义与调用 + +- 使用 `fn` 关键字定义函数。 + +- 参数需要显式声明类型。 + +```rust +fn add(a: i32, b: i32) -> i32 { + a + b +} + +fn main() { + let result = add(2, 3); + println!("Result: {}", result); +} +``` + +### 返回值 + +函数的返回值是最后一个表达式的值,无需显式 `return`。 + +```rust +// 使用 return +fn square(x: i32) -> i32 { + return x * x; +} + +// 无需显式 return +fn square(x: i32) -> i32 { + x * x // 结尾没有分号 +} +``` + +使用空元组 `()` 表示函数无返回值。 + +```rust +fn greet() { + println!("Hello, Rust!"); +} + +fn greet() { + println!("Hello, Rust!") // 无分号,返回值是 `()` +} +``` + +### 表达式和语句 + +- **表达式**会返回一个值,例如 `a + b` 或数字 `42`。 +- **语句**不返回值,例如变量声明 `let x = 5;`。 +- 函数中的最后一行是表达式,因此不需要 `return`。 + +```rust +fn calculate(x: i32) -> i32 { + let doubled = x * 2; // 语句,定义变量 + doubled + 1 // 表达式,最终返回值是 (x * 2) + 1 +} +``` + +- Rust 中的代码块 `{}` 是一个表达式,其返回值为块中最后一个表达式的值。 + +```rust +fn main() { + let result = { + let a = 10; + let b = 20; + a + b // 块的返回值 + }; + println!("Result: {}", result); // 输出 30 +} +``` + +## 实践建议 + +- 尽量利用表达式简化函数逻辑,减少显式 `return`。 +- 使用代码块返回值时,保持代码可读性,避免嵌套过深。 diff --git a/content/post/086.rust-05/index.md b/content/post/086.rust-05/index.md new file mode 100644 index 0000000..fc56798 --- /dev/null +++ b/content/post/086.rust-05/index.md @@ -0,0 +1,159 @@ +--- +title: "给 Golang 开发者的 Rust 私房菜 05 流程控制" +categories: [ "Rust" ] +tags: [ "rust" ] +draft: false +slug: "rust-tutorial-05" +date: "2025-01-05T22:57:00+0800" +--- + +## Bilibili + +{{< bilibili BV1TVrTYkETR >}} + +--- + +## 条件分支 + +- 使用 `if` 和 `else` 实现条件判断 +- 使用 `else if` 实现多重条件判断 + +```rust +fn main() { + // 单个条件 + let number = 10; + + if number > 5 { + println!("Number is greater than 5"); + } else { + println!("Number is less than or equal to 5"); + } + + // 多个条件 + let favorite_fruit = "apple"; + + if favorite_fruit == "apple" { + println!("I like apples."); + } else if favorite_fruit == "banana" { + println!("I like bananas."); + } else { + println!("I like other fruits."); + } +} +``` + +在 `let` 中使用 `if` + +```rust +fn main() { + let number = 6; + let result = if number % 2 == 0 { "even" } else { "odd" }; + println!("Number is {}", result); +} +``` + +需要注意的是,`if`表达式的值取决于执行哪个代码块。这意味着 `if` 的每个分支可能产生的值必须是相同的类型,如果类型不匹配,如下例所示,我们将收到错误 + +```rust +fn main() { + let number = 10; + let result = if number % 2 == 0 { "even" } else { 5 }; + println!("Result is {}", result); +} +``` + +## 循环重复 + +Rust 具有三种循环: `loop` 、`while` 和 `for` + +### loop 无限循环 + +使用 `loop` 关键字创建无限循环,它告诉 Rust 永远一遍又一遍地执行代码块,或者直到你明确告诉它停止为止 + +```rust +fn main() { + let mut count = 0; + loop { + count += 1; + if count > 5 { + break; + } + println!("Count: {}", count); + } +} +``` + +`break` 允许从循环结果中返回值,传递到代码的其余部分 + +```rust +fn main() { + let mut count = 0; + + let result = loop { + count += 1; + if count > 5 { + break count * 2; + } + }; + println!("Result: {}", result); +} +``` + +使用**循环标签**来中断外部循环 + +```rust +fn main() { + 'outer: loop { + println!("Entered outer loop"); + 'inner: loop { + println!("Entered inner loop"); + break 'outer; + } + println!("This point will never be reached"); + } + println!("Exited outer loop"); +} +``` + +### while 条件循环 + +程序通常需要评估循环内的条件。当条件为 `true` 时,循环运行。当条件不再为 `true` 时,程序将停止循环 + +```rust +fn main() { + let mut count = 0; + while count < 5 { + count += 1; + println!("Count: {}", count); + } + println!("Done!"); +} +``` + +### for 遍历循环 + +`for` 循环用于遍历集合,例如数组、向量、范围等 + +```rust +fn main() { + let fruits = ["apple", "banana", "cherry"]; + + for fruit in fruits { + println!("I like {}.", fruit); + } +} +``` + +`for` 循环也可以用于遍历数字范围 + +```rust +fn main() { + for number in 1..6 { // 6 不会被取到 + println!("Number: {}", number); + } + + for number in 1..=6 { // 6 会被取到 + println!("Number: {}", number); + } +} +```