fix: 084; feat: 086, 086
This commit is contained in:
parent
b06b62b96b
commit
6a13c1db10
@ -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 项目
|
||||
|
||||
|
@ -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 开发者,需要特别注意:
|
||||
|
||||
|
94
content/post/085.rust-04/index.md
Normal file
94
content/post/085.rust-04/index.md
Normal 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`。
|
||||
- 使用代码块返回值时,保持代码可读性,避免嵌套过深。
|
159
content/post/086.rust-05/index.md
Normal file
159
content/post/086.rust-05/index.md
Normal 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);
|
||||
}
|
||||
}
|
||||
```
|
Loading…
x
Reference in New Issue
Block a user