本篇在原文基础上有删减和添加,增加了一些细节内容,原文请参考一个 I/O 项目:构建一个命令行程序。 目录接受命令行参数读取参数值将参数值保存进变量读取文件重构改进模块性和错误处理二进制项目的关注分离提取参数解析器组合配置值使用 clone 的权衡取舍创建一个 Config 的构造函数修复错误处理改 ...
好的命令行可以执行更强大的功能,也能让人更好的理解你的程序,这需要有一个好的帮助系统,也需要有一个强大的解析能力。此章讲述了命令行的执行功能,希望可以帮助到你的使用。 ...
本文在原文基础上有删减,原文请参考目录如何编写测试测试函数剖析使用 assert! 宏来检查结果使用 assert_eq! 和 assert_ne! 宏来测试相等自定义失败信息使用 should_panic 检查 panic将 Result<T, E> 用于测试控制测试如何运行并行或连续的运行测试显 ...
本文在原文基础上有删减,原文参考泛型、Trait 和生命周期。 目录泛型数据类型在函数定义中使用泛型结构体定义中的泛型枚举定义中的泛型方法定义中的泛型泛型代码的性能Trait:定义共同行为定义 trait为类型实现 trait默认实现trait 作为参数Trait Bound 语法通过 + 指定多个 ...
Rust 所有权和 Move 语义 所有权和生命周期是 Rust 和其它编程语言的主要区别,也是 Rust 其它知识点的基础。 动态数组因为大小在编译期无法确定,所以放在堆上,并且在栈上有一个包含了长度和容量的胖指针指向堆上的内存。 恰到好处的限制,反而会释放无穷的创意和生产力。 Rust 所有权规 ...
目录用 panic! 处理不可恢复的错误对应 panic 时的栈展开或终止使用 panic! 的 backtraceWindows设置 RUST_BACKTRACE 环境变量的两种方式用 Result 处理可恢复的错误匹配不同的错误不同于使用 match 和 Result<T, E>失败时 pani ...
目录使用 Vector 储存列表新建 vectorVec::new 函数(无初值)vec! 宏(有初值)更新 vector读取 vector 的元素注意可变和不可变引用遍历 vector 中的元素使用枚举来储存多种类型丢弃 vector 时也会丢弃其所有元素使用字符串储存 UTF-8 编码的文本什么 ...
利用wmproxy可以轻松的转化tcp到websocket的流量互转,配置简单。可以利用现成的websocket高速通道辅助我们的tcp程序获取更稳定的流量通道。 ...
websocket与tcp协议的自由转化可以帮助我们创建更合适的网络环境,可以让运维更自由的构建系统。利用转化可以用好全站加速`DCDN`这类的功能,可以更好的保护源站,防止被DDOS攻击。 ...
学习 Rust 的 15 种方法 1. 阅读:The Rust Book - https://doc.rust-lang.org/book/ 2. 代码:做 Rustlings 练习 - https://github.com/rust-lang/rustlings 3. 课程:如何通过以下方式 学习 ...
目录包和 Crate定义模块来控制作用域与私有性在模块中对相关代码进行分组引用模块项目的路径使用 pub 关键字暴露路径二进制和库 crate 包的最佳实践super 开始的相对路径创建公有的结构体和枚举使用 use 关键字将路径引入作用域创建惯用的 use 路径.使用 use 引入函数使用 use ...
wenmeng库当前已支持HTTP1.1/HTTP2/WEBSOCKET,在浏览器的环境中websocket是必不可缺少的存在,当然有很多原生的服务中用的都是socket,下一章中,我们将实现websocket与tcp的互转,以便一些tcp的程序可以服务web的服务。 ...
目录枚举的定义枚举值将数据直接放进每一个枚举成员将不同类型和数量的数据放入枚举成员有关联值的枚举和结构体的相似性使用 impl 在枚举上定义方法Option 枚举和其相对于空值的优势match 控制流结构绑定值的模式匹配 Option<T>匹配是穷尽的通配模式和 _ 占位符if let 简洁控制流 ...
正则在计算机的处理中是非常的常用的一种技术,具有许多优点,使得它在文本处理和模式匹配方面非常强大和灵活,有强大的文本匹配和搜索功能,跨平台性跨语言,每种语言都有相应的实现,既简洁又高效便捷,是受欢迎的一种又相处较难的字符串处理技术。 ...
目录结构体的定义和实例化使用字段初始化简写语法使用结构体更新语法从其他实例创建实例使用没有命名字段的元组结构体来创建不同的类型没有任何字段的类单元结构体结构体示例程序通过派生 trait 增加实用功能方法语法定义方法带有更多参数的方法关联函数多个 impl 块 本文有删减,原文请参考使用结构体组织相 ...
目录什么是所有权?栈(Stack)与堆(Heap)所有权规则变量作用域String 类型内存与分配变量与数据交互的方式(一):移动变量与数据交互的方式(二):克隆只在栈上的数据:拷贝所有权与函数返回值与作用域引用与借用可变引用悬垂引用(Dangling References)引用的规则Slice 类 ...
在Rust下,所有变量都默认不可变,如果要声明一个可变的变量,需要在声明时加 mut let foo = 1; foo = 2; // Error!! let mut bar = 2; bar = 3; // No error! 添加库 所有的库都在crates.io这个网站下 Cargo换源 1、 ...
目录变量和可变性常量隐藏数据类型标量类型整型浮点型布尔型字符类型复合类型元组类型数组类型访问数组元素无效的数组元素访问函数参数语句和表达式具有返回值的函数注释控制流if 表达式使用 else if 处理多重条件在 let 语句中使用 if使用循环重复执行使用 loop 重复执行代码从循环返回值循环标 ...
目录安装插件创建项目运行调试参考文档 安装插件 直接安装Rust插件即可,里面包含了3个扩展包会自动安装: 各个插件的作用可以查看:如何使用VSCode配置Rust开发环境(VS Code 安装 Rust 常用插件)。 创建项目 可以手动创建目录、文件,用任意编辑器写好代码,然后用命令行编译运行,参 ...
参考各家代码,用Rust实现了线段树和懒标记。 由于使用了泛型,很多操作都要用闭包自定义实现。 看代码。 // 线段树定义 pub struct SegmentTree<T: Clone> { pub data: Vec<T>, tree: Vec<Option<T>>, marker: Vec<T ...