跳到主要内容

Rust

数据类型​

标量类型​

  1. 存在栈上
  2. 实现了 Copy trait, 赋值直接内存拷贝

char​

4字节, 表示一个 Unicode 标量值

复合类型​

元组​

  1. 不同类型值组合
  2. 一旦声明, 长度不可变
  3. 存在栈上, 包含堆分配的数据时存指向堆的指针

数组​

  1. 相同类型值组合
  2. 一旦声明, 长度不可变
  3. 存在栈上, 避免过长防止运行时栈溢出

所有权​

离开作用域时, 堆上的值 和它在 栈上的所有者 都会被drop

借用​

值的不可变引用被使用前, 不能创建它的可变引用

Slice​

集合的不可变引用

字符串 Slice​

  1. 类型是 &str
  2. 字符串切片的切片, 无法修改底层数据

字符串字面值​

  1. 类型是 &str
  2. 硬编码在二进制文件的 只读数据段
  3. slice 的指针指向只读数据段

数组 Slice​

  1. 类型有 &[i32]

闭包​

Traitcall 方法
FnOnceself
FnMut&mut self
Fn&self

集合​

Vec​

  1. 存放相同类型值
  2. 长度可变
  3. 借助 enum 存放多种类型
  4. 栈上存指针,长度,容量, 堆上存数据
  5. 赋值时, 拷贝栈上数据, 堆上所有权转移

String​

  1. 有所有权
  2. 可变
  3. UTF8 编码
  4. 存在堆上
  5. &String 是拥有所有权字符串的切片, &mut String 可以修改底层数据
提示

Unicode 为世界上所有字符分配了 码点, UTF8 决定 码点 在磁盘占几个字节


宏​

1. println!()​

  1. 不会获取参数所有权
  2. {}中不支持字段访问或方法调用, 需要使用位置参数
println!("this is {}", config.query);

2. format!()​

不会获取参数所有权


thiserror​

便捷地创建自定义错误类型

anyhow​

  1. 在向上抛出错误时, 可以通过 Context 添加业务描述
  2. 错误在线程间传递时, 已经包含 Send + Sync 约束, 保证了线程安全
  3. 一次性错误消息支持插值 return Err("Missing attribute: {}", missing);