feat: 083, 084
This commit is contained in:
parent
62ff290e72
commit
b06b62b96b
@ -11,6 +11,8 @@ date: "2024-12-30T01:20:00+0800"
|
||||
|
||||
{{< bilibili BV1BG6eYPE7L >}}
|
||||
|
||||
建议前往 B 站观看哦!
|
||||
|
||||
## 课程笔记
|
||||
|
||||
### Rust 简介
|
||||
|
78
content/post/083.rust-02/index.md
Normal file
78
content/post/083.rust-02/index.md
Normal file
@ -0,0 +1,78 @@
|
||||
---
|
||||
title: "给 Golang 开发者的 Rust 私房菜 02 变量与可变性"
|
||||
categories: [ "Rust" ]
|
||||
tags: [ "rust" ]
|
||||
draft: false
|
||||
slug: "rust-tutorial-02"
|
||||
date: "2024-12-30T16:34:00+0800"
|
||||
---
|
||||
|
||||
## 视频
|
||||
|
||||
{{< bilibili BV1ZX63YqEFa >}}
|
||||
|
||||
建议前往 B 站观看哦!
|
||||
|
||||
## 课程笔记
|
||||
|
||||
### 使用 RustRover
|
||||
|
||||
RustRover 是 JetBrains 专为 Rust 语言开发的独立 IDE,致力于提供专业的 Rust 开发环境。RustRover 源自多年来在 JetBrains IDE 中的 Rust 插件支持经验,具备完整的 Rust 功能支持,包括深度学习驱动的全行代码补全、改进的 Cargo 管理、强大的调试工具和数据库支持等功能,旨在优化开发者的 Rust 工作流。
|
||||
|
||||
RustRover 引入了灵活的许可模式:个人非商业用途可以免费使用,而商业用途则需购买付费许可。这种模式允许独立开发者免费使用专业级的 Rust 开发环境。此外,RustRover 还能与 JetBrains 的其他工具无缝集成,便于协作和版本控制,是适合团队和个人项目的理想选择。
|
||||
|
||||
### 变量声明与可变性
|
||||
|
||||
#### 变量声明的差异
|
||||
|
||||
在 Go 中,我们使用 `var` 关键字或 `:=` 简写来声明变量:
|
||||
|
||||
```go
|
||||
var name string = "Go"
|
||||
age := 42
|
||||
```
|
||||
|
||||
最大的区别在于:
|
||||
|
||||
1. Rust 默认所有变量都是不可变的(immutable)
|
||||
2. 需要显式使用 `mut`关键字来声明可变变量
|
||||
3. Rust 具有强大的类型推导能力,通常不需要显式声明类型
|
||||
|
||||
而在 Rust 中,我们使用 let 关键字:
|
||||
|
||||
```rust
|
||||
let name = "Rust";
|
||||
let mut age = 42;
|
||||
```
|
||||
|
||||
#### 变量重影(Shadowing)
|
||||
|
||||
Rust 独特的特性之一是允许变量重影:
|
||||
|
||||
```rust
|
||||
let x = 5;
|
||||
|
||||
let x = x + 1;
|
||||
|
||||
{
|
||||
let x = x * 2;
|
||||
println!("x 在当前作用域的值是: {x}");
|
||||
}
|
||||
|
||||
println!("x 的值是: {x}");
|
||||
```
|
||||
|
||||
这与 Go 中的变量重声明是不同的概念,Rust 的重影允许我们复用变量名但可以改变类型:
|
||||
|
||||
```rust
|
||||
let text = "hello";
|
||||
let text = text.len(); // 从字符串变为数字
|
||||
```
|
||||
|
||||
#### 实践建议
|
||||
|
||||
作为 Go 开发者,需要特别注意:
|
||||
|
||||
- 优先使用不可变变量,这是 Rust 的最佳实践
|
||||
- 当确实需要修改变量值时,再使用 `mut` 关键字
|
||||
- 合理利用变量重影特性可以让代码更清晰
|
158
content/post/084.rust-04/index.md
Normal file
158
content/post/084.rust-04/index.md
Normal file
@ -0,0 +1,158 @@
|
||||
---
|
||||
title: "给 Golang 开发者的 Rust 私房菜 03 数据类型"
|
||||
categories: [ "Rust" ]
|
||||
tags: [ "rust" ]
|
||||
draft: false
|
||||
slug: "rust-tutorial-03"
|
||||
date: "2024-12-30T16:36:00+0800"
|
||||
---
|
||||
|
||||
## 视频
|
||||
|
||||
{{< bilibili BV1ZX63YqEMw >}}
|
||||
|
||||
建议前往 B 站观看哦!
|
||||
|
||||
## 课程笔记
|
||||
|
||||
### Rust 的数据类型概述
|
||||
|
||||
Rust 是一门静态类型语言,在编译时就会进行严格的类型检查。
|
||||
|
||||
Rust 的数据类型可以分为两大类:
|
||||
|
||||
1. **标量类型(Scalar Types)**:
|
||||
- 单个值,如整数、浮点数、布尔值、字符。
|
||||
2. **复合类型(Compound Types)**:
|
||||
- 包含多个值的类型,如元组和数组。
|
||||
|
||||
与 Golang 对比:
|
||||
|
||||
- Rust 的类型定义更加严格,默认不会隐式类型转换。
|
||||
- 更注重内存安全和性能优化。
|
||||
|
||||
### 标量类型
|
||||
|
||||
#### 整数类型
|
||||
|
||||
- **有符号整数(Signed):** `i8`, `i16`, `i32`, `i64`, `i128`, `isize`
|
||||
- **无符号整数(Unsigned):** `u8`, `u16`, `u32`, `u64`, `u128`, `usize`
|
||||
|
||||
`isize`和`usize`类型取决于运行程序的计算机的体系结构:如果使用 64 位体系结构,则为 64 位;如果使用 32 位体系结构,则为 32 位。
|
||||
|
||||
> 默认类型是 `i32`,因为它的性能较好。
|
||||
|
||||
##### 示例
|
||||
|
||||
```rust
|
||||
fn main() {
|
||||
let x: i32 = 10;
|
||||
let y: u8 = 255;
|
||||
println!("x: {}, y: {}", x, y);
|
||||
}
|
||||
```
|
||||
|
||||
溢出行为:
|
||||
|
||||
- 调试模式:触发 panic。
|
||||
- 发布模式:会循环取值。
|
||||
|
||||
#### 浮点类型
|
||||
|
||||
- `f32`: 32 位浮点数
|
||||
- `f64`: 64 位浮点数(默认)
|
||||
|
||||
##### 示例
|
||||
|
||||
```rust
|
||||
fn main() {
|
||||
let pi: f64 = 3.14159;
|
||||
println!("Pi: {}", pi);
|
||||
}
|
||||
```
|
||||
|
||||
#### 布尔类型
|
||||
|
||||
- 类型为 `bool`。
|
||||
- 值为 `true` 或 `false`。
|
||||
|
||||
##### 示例
|
||||
|
||||
```rust
|
||||
fn main() {
|
||||
let is_rust_fun = true;
|
||||
println!("Rust is fun: {}", is_rust_fun);
|
||||
}
|
||||
```
|
||||
|
||||
#### 字符类型
|
||||
|
||||
- 使用单引号定义。
|
||||
- 支持 Unicode,长度为 4 字节。
|
||||
|
||||
##### 示例
|
||||
|
||||
```rust
|
||||
fn main() {
|
||||
let emoji = '😊';
|
||||
println!("Emoji: {}", emoji);
|
||||
}
|
||||
```
|
||||
|
||||
### 复合类型
|
||||
|
||||
#### 元组(Tuple)
|
||||
|
||||
- 可包含**多种不同类型**的值。
|
||||
- 元组的长度是**固定**的。
|
||||
|
||||
##### 示例
|
||||
|
||||
```rust
|
||||
fn main() {
|
||||
let tup: (i32, f64, u8) = (500, 6.4, 1);
|
||||
let (x, y, z) = tup; // 解构元组
|
||||
println!("The value of y is: {}", y);
|
||||
}
|
||||
```
|
||||
|
||||
#### 数组(Array)
|
||||
|
||||
- 固定长度,元素类型**必须相同**。
|
||||
- 与 Golang 的切片不同,Rust 的数组大小在编译期就确定。
|
||||
|
||||
##### 示例
|
||||
|
||||
```rust
|
||||
fn main() {
|
||||
// 类型推导
|
||||
let arr = [1, 2, 3];
|
||||
// 指定类型
|
||||
let arr: [i32; 3] = [1, 2, 3];
|
||||
|
||||
println!("Array: {:?}", arr);
|
||||
}
|
||||
```
|
||||
|
||||
### 类型转换
|
||||
|
||||
Rust 不支持隐式类型转换,必须显式转换。
|
||||
|
||||
- 使用 `as` 关键字进行类型转换。
|
||||
|
||||
##### 示例
|
||||
|
||||
```rust
|
||||
fn main() {
|
||||
let x = 10;
|
||||
let y = x as f64 / 3.0;
|
||||
println!("y: {}", y);
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 实践建议
|
||||
|
||||
- **优先使用类型推导**:Rust 的类型推导可以减少代码冗余。
|
||||
- **注意整数溢出**:调试模式下会 panic,发布模式下会循环取值。
|
Loading…
x
Reference in New Issue
Block a user