2.9 KiB
2.9 KiB
title, categories, tags, draft, slug, date
title | categories | tags | draft | slug | date | ||
---|---|---|---|---|---|---|---|
给 Golang 开发者的 Rust 私房菜 03 数据类型 |
|
|
false | rust-tutorial-03 | 2024-12-30T16:36:00+0800 |
视频
{{< bilibili BV1ZX63YqEMw >}}
建议前往 B 站观看哦!
课程笔记
Rust 的数据类型概述
Rust 是一门静态类型语言,在编译时就会进行严格的类型检查。
Rust 的数据类型可以分为两大类:
- 标量类型(Scalar Types):
- 单个值,如整数、浮点数、布尔值、字符。
- 复合类型(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
,因为它的性能较好。
示例
fn main() {
let x: i32 = 10;
let y: u8 = 255;
println!("x: {}, y: {}", x, y);
}
溢出行为:
- 调试模式:触发 panic。
- 发布模式:会循环取值。
浮点类型
f32
: 32 位浮点数f64
: 64 位浮点数(默认)
示例
fn main() {
let pi: f64 = 3.14159;
println!("Pi: {}", pi);
}
布尔类型
- 类型为
bool
。 - 值为
true
或false
。
示例
fn main() {
let is_rust_fun = true;
println!("Rust is fun: {}", is_rust_fun);
}
字符类型
- 使用单引号定义。
- 支持 Unicode,长度为 4 字节。
示例
fn main() {
let emoji = '😊';
println!("Emoji: {}", emoji);
}
复合类型
元组(Tuple)
- 可包含多种不同类型的值。
- 元组的长度是固定的。
示例
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 的数组大小在编译期就确定。
示例
fn main() {
// 类型推导
let arr = [1, 2, 3];
// 指定类型
let arr: [i32; 3] = [1, 2, 3];
println!("Array: {:?}", arr);
}
类型转换
Rust 不支持隐式类型转换,必须显式转换。
- 使用
as
关键字进行类型转换。
示例
fn main() {
let x = 10;
let y = x as f64 / 3.0;
println!("y: {}", y);
}
实践建议
- 优先使用类型推导:Rust 的类型推导可以减少代码冗余。
- 注意整数溢出:调试模式下会 panic,发布模式下会循环取值。