刷新
rust web 的自定义extract获取jwt

刚开始学习rust的时候,web框架一大堆,感觉无所适从。有的框架类似于 springboot里注解的方式 使用宏,有的是用函数的方式。 随着异步框架 tokio地位的稳固,axum是一个不错的选择。axum采用的是函数的方式。 其实框架里是写好的验证处理程序的。源码里有基本验证和令牌验证两种方式。 ...

rust中的超时处理

自从 tokio 1.0发布以来,rust的异步开发总算大势已定。尽管没达到标准库的速度,依然挡不住大家的热情。看编程排行榜,增加2倍的开发者。 既生瑜何生亮,感觉go就是小号的rust。 不废话了。背景:之前用go开发一个边缘网关的小东东,业余时间做了一大半。后来学了rust,打算练手,用rust ...

最强肉坦:RUST多线程

博主头像 近几年国内外声名鹊起的Rust编程语言,声名远播,影响力巨大,到底是什么让它如此强大?本文适合作为一篇初级入门的文章。本文的优势是通过一个常见的例子作为线索,引出Rust的一些重要理念或者说特性,通过这些特性深刻体会Rust的魅力。 ...

Rust 所有权

所有权规则 Rust 中的每一个值都有一个被称为其 所有者(owner)的变量。 值在任一时刻有且只有一个所有者。 当所有者(变量)离开作用域,这个值将被丢弃。 引用和Copy特性 赋值过程:包括变量赋值,函数传参,函数返回 如果类型实现了Copy特性(基本简单类型),传参过程相当于创建了一份新拷贝 ...

Rust基础08-模式匹配

博主头像 模式匹配 控制流运算符——match: 其允许一个值与一系列模式进行匹配,并执行匹配的模式对应的代码 这些模式可以是字面值、变量名、通配符... 绑定值的模式: 匹配的分支可以绑定到被匹配对象的部分值 因此,可以从 enum 变体中提取值 //绑定值 #[derive(Debug)] enum Us ...

【Fitz】Rust VSCode插件推荐

博主头像 一、代码编写、调试、运行 1. rust-analyzer 一直以来,Rust官方维护的 RLS(Rust Language Server)都是 Rust 插件,但是大多数人推荐使用的都是 rust-analyzer。rust-analyzer 项目始于2017年年底,随着功能越来越强大,如今已经成 ...

Rust所有权及引用

博主头像 Rust 所有权和借用 Rust之所以可以成为万众瞩目的语言, 就是因为其内存安全性. 在以往内存安全几乎全都是通过GC的方式实现, 但是GC会引来性能、CPU以及Stop The World等问题, 在需要高性能的场景是不可以接受的,因此Rust使用一种与众不同的方式 解决内存安全问题: 所有权机 ...

rust使用vec在遍历时删除元素

rust使用vec在遍历时删除元素 需求: 工作中有一个地方需要用到在遍历时把不符合条件的元素删除掉, 比如一个vec中是原始数据是 vec![1,2,3,3,4,5] ,然后我要在遍历中把等于c的元素删除掉,目的是得到vec![1,2,4,5] 第一次错误尝试 由于最开始只知道移除元素用remov ...

Rust语言开发

博主头像 Rust开发 碳达峰、碳中和政策下,开发者可以考虑采用 Rust 为节能做贡献。 第一个程序 fn main() { println!("Hello, world!"); // 带!号的都是宏 并不是函数 } fn main() { let name = "peter"; println!("{}{ ...

rust 实战 - 实现一个线程工作池 ThreadPool

如何实现一个线程池 线程池:一种线程使用模式。线程过多会带来调度开销,进而影响缓存局部性和整体性能。而线程池维护着多个线程,等待着监督管理者分配可并发执行的任务。这避免了在处理短时间任务时创建与销毁线程的代价。线程池不仅能够保证内核的充分利用,还能防止过分调度。可用线程数量应该取决于可用的并发处理器 ...

Rust 使用 dotenv 来设置环境变量

博主头像 在项目中,我们通常需要设置一些环境变量,用来保存一些凭证或其它数据,这时我们可以使用 dotenv 这个 crate。 首先在项目中添加 dotenv 这个依赖: 例如在下面这个项目中,需要设置数据库连接字符串和 Debug 等级这两个环境变量。在开发环境下,我们可以在项目根目录下创建 .env 这 ...

Rust 连接 PostgreSQL 数据库

博主头像 这次,我们使用 postgres 这个 crate 来连接和操作 PostgreSQL 数据库。 创建好项目后,在 cargo.toml 里添加 postgres 的依赖: 首先,导入相关的类型,并创建一个 Person struct: 再创建 create_db 函数,用来创建数据库和表,它返回一 ...

Rust 连接 SQLite 数据库

博主头像 使用 Rust 语言连接操作 SQLite 数据库,我使用 rusqlite 这个 crate。 看例子: 首先,使用 cargo 创建一个 Rust 项目,然后添加依赖 rusqlite: 来到 main.rs,其余所有的代码都写在这里。 首先引入 rusqlite 相关的类型,并建立一个 Per ...

rust 模块组织结构

博主头像 rust有自己的规则和约定用来组织模块,比如一个包最多可以有一个库crate,任意多个二进制crate、导入文件夹内的模块的两种约定方式... 知道这些约定,就可以快速了解rust的模块系统。 先把一些术语说明一下: 包是cargo的一个功能,当执行cargo new xxxx的时候就是创建了一个包 ...

Rust新手教程:使用VSCode配置Rust开发环境

博主头像 VSCode配置Rust开发环境 在商店中输入rls,选择rust,点击Quick start中的下载链接。这个Rust插件你也要记得下。 跳转后来到下载界面,点击下载。 运行下载好的exe文件,命令行输入1按下回车即可。 安装完毕后在命令行输入rustc --version,如果能输出版本号则表示 ...

Rust包和crate以及模块

博主头像 概念 crate 是一个二进制项或者库。crate root 是一个源文件,Rust 编译器以它为起始点,并构成你的 crate 的根模块(我们将在 “DefiningModules to Control Scope and Privacy” 一节深入解读)。包(package) 是提供一系列功能的 ...

Rust异步之Future

博主头像 对异步的学习,我们先从Future开始,学习异步的实现原理。等理解了异步是怎么实现的后,再学习Rust异步编程涉及的2个库(futures、tokio)的时候就容易理解多了。 Future rust中Future的定义如下,一个Future可以理解为一段供将来调度执行的代码。我们为什么需要异步呢,异 ...

Rust GUI编程

博主头像 1.可以用iced框架,star比较多,而且在快速发展中,源码跨平台; 2.在main方法文件最上面加上:#![windows_subsystem = "windows"],这样Windows平台运行编译好的gui程序时就不会弹出控制台框; 对于Mac OS,Linux可以自己写个图标配置(Linu ...