- 博客(18)
- 收藏
- 关注
原创 Rust中自定义Debug调试输出
使用 write!拼接格式x: i32,y: i32,write!println!("{:?}", p);使用 f.debug_struct() 构建输出x: i32,y: i32,.finish()println!("{:?}", p);• fmt::Debug 是 Rust 中的调试格式化工具,用于 {:?} 打印。• 可以通过 #[derive(Debug)] 自动生成,也可以手动实现以满足自定义需求。
2024-12-16 19:11:02
773
原创 Rust中用enum实现多参数Hook机制
• 核心思路:利用 enum 表达多种输入和输出类型,配合模式匹配实现多参数和多逻辑分支的 Hook 机制。• 扩展性强:通过新增枚举变体,可以轻松支持更多的输入和返回值类型。• 适用场景:• 插件系统• 事件驱动架构• 动态业务逻辑处理。
2024-12-15 00:09:12
1150
原创 Rust库之anyhow
在 Rust 中,anyhow 是一个流行的库,提供简单易用的错误处理功能,尤其适合处理复杂或通用的错误场景。它是基于 std::error::Error 的一个轻量级包装器,能让错误管理更高效。
2024-12-07 23:28:07
585
原创 Rust包之once_cell
在 Rust 中,once_cell 是一个非常有用的 crate,用于实现惰性初始化(lazy initialization)的单例模式。它允许某些值只被初始化一次,并且之后始终保持不变。该功能在需要全局变量或延迟计算的情况下非常实用。
2024-12-06 22:25:05
1120
原创 Rust中Vec<u8>和&[u8]有什么区别
Vec 和 &[u8] 是 Rust 中两种表示字节序列的不同类型,它们的区别主要体现在 所有权、可变性 和 内存管理 等方面。• Vec 有容量(capacity)和长度(len),容量可以大于长度。不涉及分配内存,操作开销低,适合用于高效的只读场景。• 是对字节切片的不可变引用,表示一段连续的内存。• 不拥有内存,指向的底层数据由其他对象管理。• 只是指向现有的内存,长度等于引用的范围。只是对已有数据的借用,不会参与内存管理。• 数据大小固定,不需要动态扩展。• 需要独立管理数据的生命周期。
2024-12-04 11:14:41
622
原创 Rust中BytesMut是什么?
BytesMut 是 Rust 中 bytes crate 提供的一个数据结构,表示一个高效的、可变的字节缓冲区。它常用于处理网络数据或其他需要灵活字节序列操作的场景,比如在异步 I/O 中。
2024-12-03 15:00:34
569
原创 Rust 的异步 I/O 编程中read和read_buf区别
在 Rust 的异步 I/O 编程中,tokio::io::AsyncReadExt::read 和 tokio::io::AsyncReadExt::read_buf 都是用于从异步流中读取数据的方法,但它们的使用方式和场景略有不同。
2024-11-28 21:08:58
708
原创 Rus中.to_owned()有什么作用?
• .to_owned() 是一种便捷的方法,用于从引用创建一个新的拥有所有权的实例。• 适用于 str → String,切片 → Vec 等场景。• 对于已经拥有所有权的数据类型,使用 .clone() 更加直观。
2024-11-27 00:07:14
711
原创 Rust中怎样实现链式调用?
在 Rust 中,链式调用是通过方法调用返回 self 或者 &self/&mut self 来实现的。这种方式允许多个方法在一行内连续调用,非常适合构建器模式或函数式风格的代码。
2024-11-26 21:48:21
724
原创 Rust的flume库使用教程
flume 是一个高性能的 Rust 消息通道(channel)库,类似于标准库中的 std::sync::mpsc,但提供了更多功能、更好的性能和异步支持。flume 可以在多线程和异步环境中传递消息,常用于线程间通信、任务分发等场景。
2024-11-25 15:03:11
402
原创 Rust的slab库使用教程
slab 提供了一个固定大小的对象存储(Slab),其行为类似于一个动态分配的数组:• 每次插入都会返回一个唯一的索引(usize)。• 通过索引可以快速访问或移除对象。• 内部会自动重用被移除的存储槽,减少内存分配的开销。slab 是一个轻量级、高性能的工具,非常适合管理固定大小的资源集合,尤其是在网络编程和事件驱动架构中。通过其独特的固定槽和索引机制,slab 可以有效减少内存分配成本,同时提供简单直观的 API,帮助开发者编写更高效的代码。
2024-11-25 14:40:55
1826
原创 Rust标准库Default特性是什么?
• 只有一个方法:default。• 返回值是类型本身的一个实例。• 通常用来提供一个合理的初始值。为结构体实现x: i32,y: f64,z: String,println!手动实现 Default有时你需要更复杂的默认值,此时可以手动实现 Default:x: i32,y: f64,println!• Default 提供一种统一的方法来生成合理的默认值。• 可以为标准类型直接使用,也可以为自定义类型实现。
2024-11-22 08:51:47
488
原创 Rust中std::marker::PhantomData是什么?
std::marker::PhantomData 是 Rust 中的一个零大小类型(zero-sized type,ZST),用于类型系统标记,尤其是在泛型类型中。它本身不占用任何内存,但可以帮助编译器进行类型检查或声明所有权和生命周期关系。
2024-11-22 08:41:02
479
原创 Rust标准库std::env模块常用方法
std::env 是 Rust 标准库中与环境变量、当前进程、工作目录等相关的模块。它提供了在程序运行时与操作系统环境交互的功能。
2024-11-21 21:42:21
461
原创 Rust中#[derive]的作用是什么?
在 Rust 中,#[derive] 是一个属性,用于自动为类型生成常见的实现,比如 Clone、Debug 等。它能极大地减少重复代码,同时确保实现的正确性和一致性。
2024-11-21 19:46:48
403
原创 Rust中macro_rules!怎么使用?
是 Rust 编程语言中用于定义宏的关键字。宏是一种元编程工具,允许你通过参数化代码片段,生成重复或动态的代码,从而提高代码的可读性和重用性。
2024-11-21 15:12:46
262
原创 Rust中正确使用unwrap()处理Option 和 Result
unwrap 的作用:解包 Option 或 Result,获取内部值。如果为空或错误,会触发 panic。避免滥用 unwrap:使用替代方法(如 unwrap_or、expect、match)。确保在安全、逻辑明确的场景下使用 unwrap。unwrap() 是一种简单直接的方法,但在实际开发中,需要谨慎对待,避免因其导致程序不必要的崩溃。
2024-11-20 14:40:13
1023
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人