fix: 084; feat: 086, 086

This commit is contained in:
TaurusXin 2025-01-05 23:31:43 +08:00
parent b06b62b96b
commit 6a13c1db10
Signed by: taurusxin
GPG Key ID: C334DCA04AC2D2CC
5 changed files with 266 additions and 13 deletions

View File

@ -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 在内核中的应用仍处于初期阶段,未来可能会逐步扩大。
### 安装
## 安装
- 官方网站:<https://www.rust-lang.org/>
@ -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 项目

View File

@ -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 开发者,需要特别注意:

View File

@ -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`
- 使用代码块返回值时,保持代码可读性,避免嵌套过深。

View File

@ -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);
}
}
```