
Rust
muyouking11
这个作者很懒,什么都没留下…
展开
-
Rust网络编程实战:全面掌握reqwest库的高级用法
reqwest支持使用rustls或native-tls作为TLS后端。.build()?;;println!println!Ok(())操作原理说明:通过创建一个可配置的客户端实例,使用方法指定使用rustls作为TLS后端,通过方法设置TLS配置。适用场景:对TLS安全性有较高要求的场景,如金融交易、敏感数据传输等。原创 2025-04-19 21:17:21 · 1509 阅读 · 0 评论 -
10.Rust + Axum 生产级部署与监控全攻略
深入探讨 Rust + Axum 生产部署,涵盖容器化与 K8s 部署,及指标和日志相关内容。通过 Docker 容器化和 Kubernetes 部署,我们可以将 Rust + Axum 应用轻松部署到生产环境,并实现自动化管理和扩展。使用 Prometheus 和 Grafana 进行指标收集和可视化,可以帮助我们实时监控应用的性能。而集成 Sentry 则可以实现日志聚合和错误追踪,快速定位和解决应用中的问题。这些技术和工具的结合,为 Rust + Axum 应用的生产级部署和监控提供了全面的解决方案。原创 2025-04-18 19:56:47 · 638 阅读 · 0 评论 -
9.Rust+Axum 测试驱动开发与性能优化全攻略
本文深入讲解 Rust+Axum 测试驱动开发及性能优化,涵盖多种测试工具与优化技术。通过本文的介绍,我们了解了在 Rust+Axum 项目中如何进行测试驱动开发和性能优化。合理搭建单元测试和集成测试框架可以保证代码的正确性和稳定性,使用 wrk 和 oha 工具进行性能压测可以帮助我们发现性能瓶颈,而零拷贝优化和内存泄漏检测则可以进一步提升应用的性能和可靠性。在实际开发中,我们应该充分利用这些技术和工具,不断优化我们的 Rust+Axum 应用。原创 2025-04-18 19:54:47 · 883 阅读 · 0 评论 -
5.Rust+Axum:打造高效错误处理与响应转换机制
深入剖析 Rust+Axum 错误处理及响应转换,示例丰富实用。在 Rust 中,是一个常用的枚举类型,用于表示可能失败的操作。在 Axum 中,处理函数通常返回Result类型,成功时返回Ok,失败时返回Err。Router,// 模拟一个可能失败的操作if true {} else {.await.unwrap();为了更好地管理错误信息,我们可以自定义错误类型。NotFound,// 模拟一个可能失败的操作if false {} else {通过统一错误响应格式设计、使用。原创 2025-04-18 06:18:26 · 728 阅读 · 0 评论 -
3.Rust + Axum 提取器模式深度剖析
深入解读 Rust + Axum 提取器模式,涵盖内置提取器及自定义实现。有时候,内置提取器可能无法满足我们的需求,我们需要自定义提取器来实现更复杂的请求数据验证。例如,我们希望对用户输入的邮箱地址进行格式验证。})?;format!在这个示例中,我们定义了一个结构体,并使用validator库对邮箱地址进行格式验证。然后,我们自定义了一个提取器,在方法中,首先使用Json提取器提取请求体中的 JSON 数据,然后对数据进行验证。如果验证失败,返回一个包含错误信息的响应;原创 2025-04-17 21:54:58 · 905 阅读 · 0 评论 -
0.深入探秘 Rust Web 框架 Axum
Axum 是一个基于 Tower 和 Hyper 构建的 Rust Web 框架,它的设计目标是提供一个简洁、高效且可扩展的 API,让开发者能够轻松构建高性能的 Web 服务。Axum 的核心特点在于其强大的路由系统、中间件支持以及对异步编程的良好集成,使得开发者可以充分利用 Rust 的异步特性,实现高效的并发处理。Axum 作为 Rust 生态系统中的一款优秀 Web 框架,具有高性能、内存安全、强大的路由系统、中间件支持和异步编程支持等诸多优势。原创 2025-04-17 21:42:06 · 750 阅读 · 0 评论 -
1.Axum 与 Tokio:异步编程的完美结合
深入解析 Axum 核心架构与 Tokio 异步运行时的集成,掌握关键原理与实践技巧。Axum 是一个基于 Tower 和 Hyper 构建的 Rust Web 框架,它的设计目标是提供一个简洁、高效且可扩展的 API,让开发者能够轻松构建高性能的 Web 服务。Tokio 是 Rust 生态系统中最流行的异步运行时,它提供了异步 I/O、任务调度、定时器等功能,使得开发者可以方便地进行异步编程。本文深入探讨了 Axum 的核心架构以及它是如何与 Tokio 异步运行时集成的。原创 2025-04-17 21:40:24 · 1116 阅读 · 0 评论 -
2.深入剖析 Rust+Axum 类型安全路由系统
详细解读 Rust+Axum 路由系统的关键设计原理,涵盖基于 Rust 类型系统的路由匹配机制、动态路径参数与正则表达式验证以及嵌套路由与模块化组织等多种特性。Rust+Axum 类型安全路由系统通过利用 Rust 的类型系统,实现了静态路由和动态路由的类型安全匹配。同时,结合正则表达式验证和嵌套路由、模块化组织等特性,使得路由系统更加灵活、可维护和易于扩展。在实际开发中,合理运用这些特性可以提高代码的质量和开发效率,为构建高性能、可靠的 Web 应用提供有力支持。原创 2025-04-17 21:38:55 · 666 阅读 · 0 评论 -
Rust 将列表内容写出到文件
//将vec里的内容写出到文件fn write_vec_to_file(slice: Vec<String>, filename: &str) -> std::io::Result<()> { let new_content = slice.join("\r\n"); std::fs::write(filename, new_content)?; // println!("{:#?}",new_content); // println!原创 2021-10-12 16:21:05 · 503 阅读 · 0 评论 -
Rust读取文件返回列表
//读取文件以行为元素保存为列表fn read_to_list(path: &str) -> Option<Vec<String>> { let model_filename: String = std::fs::read_to_string(path).unwrap(); let result: Vec<String> = model_filename .lines() .into_iter()原创 2021-10-12 16:20:31 · 539 阅读 · 0 评论 -
rustup源系统环境变更配置
添加环境变量RUSTUP_DIST_SERVER=‘https://mirrors.ustc.edu.cn/rust-static‘RUSTUP_UPDATE_ROOT=‘https://mirrors.ustc.edu.cn/rust-static/rustup‘原创 2021-10-08 14:36:38 · 543 阅读 · 0 评论 -
rust if let和while let
if let 与 while let 可以用来获取返回值是Option 或者Result<>里面的内容if let当只需要判断一个数据时使用if let let bool = true; let mut num = 0; if let true = bool{ num +=1;}}while let当需要判断一系列数据时使用while letlet mut v = vec![1,2,3,4,5,6];while let Some(i) = v.pop(){原创 2021-07-27 07:12:02 · 738 阅读 · 0 评论 -
rust 配置cargo 镜像源
将下面的内容复制保存成config(无后缀) 放在.cargo文件夹下面,或者在项目文件夹与.toml文件同级目录里新建一个.cargo文件夹,放在里面[source.crates-io]registry="https://github.com/rust-lang/crates.io-index"#指定镜像#如:tuna、sjtu、ustc,或者 rustccreplace-with='tuna'#注:以下源配置一个即可,无需全部#中国科学技术大学[source.ustc]regist原创 2021-07-26 11:51:42 · 1697 阅读 · 2 评论 -
rust 运行测试代码时也能显示打印信息
// 注意这个nocapture不能在vscode里起效果,得是在cmd里才行// --color always 是打开彩色开关cargo test -- --capture --color always原创 2021-07-24 10:43:28 · 637 阅读 · 0 评论 -
Rust 生命周期与泛型函数
fn main(){ println!(""); let a = [0,-3,0,15,48]; let e = find_ext(&a); println!("greatest:{},least:{}",e.greatest,e.least);}struct Ext<'a,T>where T:PartialOrd + std::fmt::Display{ greatest: &'a T, least: &'a.原创 2021-06-21 17:25:26 · 340 阅读 · 0 评论 -
Rust 泛型结构体
fn main(){ let mut q1 : Queue<u8> = Queue::new(); q1.push(3); q1.push(4); println!("{:#?}",q1); println!("{}",q1.is_empty());}#[derive(Debug,Clone)]pub struct Queue<T>{ older:Vec<T>, younger: Vec<T>}i原创 2021-06-21 16:53:36 · 794 阅读 · 0 评论 -
Rust 为结构体定义方法与构造函数
fn main() { let mut my_queue = Queue::new(); my_queue.push('A'); my_queue.push('B'); for i in 0..5{ my_queue.push('C'); } println!("{:#?}",my_queue); let mut my_queue_2 = my_queue.clone(); my_queue_2.push('E');原创 2021-06-20 00:22:42 · 2309 阅读 · 0 评论 -
Rust 类元组结构体
fn main(){ let c_color = Color(50,50,50); let mut c_color_1 = c_color.clone(); c_color_1.0 = 20; println!("{:#?}\n{:#?}",c_color,c_color_1);}/// # 类元组结构体/// #[derive(Debug,Clone)]struct Color( u8,u8,u8); // 注意,命名字段结构体与枚举enum 不需原创 2021-06-19 23:39:01 · 708 阅读 · 0 评论 -
Rust 结构体
fn main(){ /// 实例化结构体 let width = 1024; let height = 576; let image = GrayscaleMap{ pixels: vec![0;width * height], size:(width, height) }; println!("{:?}",image.size); let hokey = Boom{ name: "Hokey".原创 2021-06-19 23:19:08 · 251 阅读 · 0 评论 -
Rust Vec<T>
创建空向量let mut numbers : Vec<i32> = vec![];创建给定内容的向量 let mut words = vec!["apple","red","yellow"]; let mut buffer = vec![0i32;1024];//1024个填充0的字节 println!("words:{:?}",words); let my_vec = words.into_iter().collect::<Vec<&str&原创 2021-06-09 16:58:52 · 731 阅读 · 0 评论 -
Rust 练习 泛型 及 match
use std::ops::Add;use std::fmt::{Display,Debug};fn main() { let sum = get_a_add_b(23,42); println!("{}",sum); print("str"); deal(my_enum::A{x:"forver".to_string(),y:"Rust".to_string()}); deal(my_enum::B(234,12,234));}//实现Add的泛型fn g原创 2021-05-26 07:13:06 · 279 阅读 · 0 评论 -
Rust 枚举及其变体的使用
fn main(){println!("===============enum====================="); enum_test();}#[derive(Debug)]enum In_enum{ Boy, Gril}//枚举及其各种变体的使用#[derive(Debug)]enum my_enum<'a>{ A, B{b:String,c:i32},//结构体 C(i32,i32,i32),//元组 D.原创 2021-05-25 13:22:50 · 703 阅读 · 0 评论 -
Rust std::env::args().collect() 获取cmd输入信息
//获取cmd输入信息fn args() -> Result<(),Box<dyn Error>>{ let args:Vec<String> = std::env::args().collect(); if args.len() < 2{ println!("请输入目录名!") } println!("当前输入的目录为:{}",args[1]); Ok(())}...原创 2021-05-25 12:53:27 · 956 阅读 · 0 评论 -
Rust 使用trait 来实现函数重载
fn main(){ let hero = Hero::with("Apple".to_string()); println!("{:#?}",hero); let hero2 = Hero::with(Sex::Gril); println!("{:#?}",hero2); let hero3 = Hero::with(32); println!("{:#?}",hero3); let hero4 = Hero::new(); println原创 2021-05-25 09:12:28 · 1423 阅读 · 0 评论 -
Rust 迭代器适配器
迭代器iter()iter_mut()使用迭代器方法可以产生迭代器,而一旦有了迭代器就可使用Iterator提供的大量适配器方法,这些适配器可以消费一个迭代器并创建一个具备有用行为的新迭代器。适配器map 和 filtermap: 可以为迭代器的每个项都应用一个闭包filter: 可以过滤某些项,使用闭包来决定保留或清除哪些项,只返回闭包中结果为true的项,例如闭包 |x| *x !="" 放进filter()中,则表示只返回非空的字符串进集合中注意map 会将迭代项按值传原创 2021-05-22 00:22:35 · 445 阅读 · 0 评论 -
Rust文件操作相关
通过Path 获取 文件夹路径,文件名,后缀use std::path::Path;use std::ffi::OsStr;fn main() { let path = Path::new("F:/AUPMODEL/1156668"); let parent = path.parent(); assert_eq!(parent,Some(Path::new("F:/AUPMODEL/1156668"))); let file_stem = path.file_stem(原创 2021-05-20 14:20:47 · 2238 阅读 · 0 评论 -
Rust 可变引用与不可变引用
如何在一个作用域里使用同一个可变变量的不可变引用与可变引用fn mut_and_not_mut(){ let mut s = String::from("Hello Wrold!"); let s1 = &s; let s2 = &s; println!("s1:{}\ts2:{}\n",s1,s2); //就算声明的不可变引用没有被调用,只要确保下面声明完可变引用后不会再调用上面的不可变引用即可。不过较少发生这种声明完一个变量又不用的情况。 let原创 2021-05-20 09:22:57 · 1220 阅读 · 0 评论 -
Rust 自定义迭代器 Iterator
struct Counter{ counter : u32,}impl Counter{ fn new() -> Counter{ Counter{counter : 0} }}impl Iterator for Counter{ type Item = u32; fn next(&mut self) -> Option<Self::Item>{ if self.counter < 5原创 2021-04-27 17:49:20 · 433 阅读 · 0 评论 -
Rust filter过滤迭代项
#[derive(PartialEq,Debug)]struct Shoe{ size: u8, style: String,}fn shoes_in_my_size(shoes :Vec<Shoe>,shoes_size : u8)-> Vec<Shoe>{ shoes.into_iter().filter(|x| x.size == shoes_size).collect()}fn fileter_by_size(){ let原创 2021-04-27 14:20:50 · 2131 阅读 · 0 评论 -
Rust 学习笔记
字符串篇字符串切片let s = "Hello World";let a = &s[1..4];println!("{}",a);输出 ell遍历字符串fn each_str(s: &str){ for i in s.chars(){ //do something print!("{}",i);}}原创 2021-04-20 16:12:34 · 394 阅读 · 0 评论 -
Rust HashMap 的使用
use std::collections::HashMap;type Map = HashMap<String,Vec<String>>;fn show(table: &Map){ for (artist,works) in table{ println!("the artis {}",artist); for work in works{ println!(" {}",work); }原创 2021-02-28 23:37:45 · 347 阅读 · 0 评论 -
runst 闭包
#![allow(dead_code)]fn func1(i:i32) -> i32{ i+1} //正常的函数fn main(){ let a = 3; let func2=|i:i32| ->i32{ i+2}; //闭包1,有参,有返回值 let func3 = ||1; //闭包2,无参,无返回值 let func4 = |i:i32| i*3; //闭包3,有参原创 2021-02-24 13:41:55 · 166 阅读 · 0 评论 -
Rust 为自定义的结构体实现Debug与Display
use std::fmt;#[derive(Debug)]struct Point2D{ x:f64, y:f64,}impl fmt::Display for Point2D{ fn fmt(&self,f: &mut fmt::Formatter) -> fmt::Result{ write!(f,"x:{}, y:{}",self.x,self.y) }}fn main(){ let my_Point_2D =原创 2021-02-05 16:54:51 · 1976 阅读 · 0 评论 -
Rust 数组
定义:数组的大小是固定的,但其中的元素是可以被更改的。格式1: let array_name: [T;size] //不可修改数组元素的定义方式格式2: let mut array_name[T;size] //使用let mut 定义可以修改元素值的数组获取数组元素:方法一:通过索引值获取let mut array_name:[u8;3] = [2,3,4];printlln!("索引为0的元素值为:{}",array_name[0]);方法二:通过循环表达式获取里面的元素for i原创 2020-12-31 10:33:48 · 1666 阅读 · 0 评论