Rust - 常用的三方库集合
一、once_cell
是一种只执行一次的容器,多用于
全局变量
,安全初始化
,或者延迟初始化
set(T)
=> 安全的设置全局变量get() -> T
=> 获取已经设置的全局变量get_or_init(Fn)
=> 获取全局变量,为空则初始化Lazy::new(Fn)
=> 延迟创建全局变量
use std::{sync::Mutex, collections::HashMap};
use once_cell::sync::Lazy;
use once_cell::sync::OnceCell;static GLOBAL_DATA: Lazy<Mutex<HashMap<i32, String>>> = Lazy::new(|| {let mut m = HashMap::new();m.insert(13, "Spica".to_string());m.insert(74, "Hoyten".to_string());Mutex::new(m)
});fn global_data() -> &'static Mutex<HashMap<i32, String>> {static INSTANCE: OnceCell<Mutex<HashMap<i32, String>>> = OnceCell::new();INSTANCE.get_or_init(|| {let mut m = HashMap::new();m.insert(13, "Spica".to_string());m.insert(74, "Hoyten".to_string());Mutex::new(m)})
}
二、lazy_static
是一种执行一次的宏,多用于初始化
全局变量
,功能相对单一
#[macro_use]
extern crate lazy_static;use std::collections::HashMap;lazy_static! {static ref HASHMAP: HashMap<u32, &'static str> = {let mut m = HashMap::new();m.insert(0, "foo");m.insert(1, "bar");m.insert(2, "baz");m};static ref COUNT: usize = HASHMAP.len();static ref NUMBER: u32 = times_two(21);
}fn times_two(n: u32) -> u32 { n * 2 }fn main() {println!("The map has {} entries.", *COUNT);println!("The entry for `0` is \"{}\".", HASHMAP.get(&0).unwrap());println!("A expensive calculation on a static results in: {}.", *NUMBER);
}
三、serde、serde_json、serde_yaml、serde_urlencoded、toml-rs
是一个关于序列化和反序列化的三方库,常用于配置文件解析,或http返回json
[dependencies]
serde = { version = "1.0.105", features=["derive"] }
serde_json = "1.0.50"
serde_yaml = "0.8.11"
serde_urlencoded = "0.6.1"
toml = "0.5.6"
chrono = { version = "0.4.11", features=["serde"]}
#[macro_use]
extern crate serde;use chrono::NaiveDateTime;
use serde_json;#[derive(Debug, Serialize, Deserialize)]
struct User {name: String,age: u32,#[serde(rename="sex")]gender: u32,birthday: NaiveDateTime,
}fn main() {let str = r#"{"name": "jack", "age": 20, "sex": 1, "birthday": "2020-01-01T15:14:15"}"#;let v: User = serde_json::from_str(str).unwrap();println!("{:?}", v) // User { name: "jack", age: 20, gender: 1, birthday: 2020-01-01T15:14:15 }
}
四、hyper、reqwest
一个基于tokio的网络库
let client = Client::new();let mut res = client.get(url).await?;println!("Response: {}", res.status());println!("Headers: {:#?}\n", res.headers());// Stream the body, writing each chunk to stdout as we get it// (instead of buffering and printing at the end).while let Some(next) = res.data().await {let chunk = next?;io::stdout().write_all(&chunk).await?;}println!("\n\nDone!");
let body = reqwest::get("https://www.rust-lang.org").await?.text().await?;println!("body = {:?}", body);
五、clap、dotenv、app_dirs、preferences
命令行相关的工具库,非常强大
六、tokio、async-std
两套类似的异步编程runtime实现库,虽然async-std强词夺理说这是让async编程发扬光大,其实是生生割裂了异步编程生态的健康发展。
Rust - 常用的三方库集合相关推荐
- 项目中常用的github库集合
1.沉浸式 immersionbar //沉浸式状态栏// 基础依赖包,必须要依赖implementation 'com.gyf.immersionbar:immersionbar:3.0. ...
- 机器学习常用python三方库
1.NumPy 最常用的也许是它的N维数组对象,其他还包括一些成熟的函数库,用于整合C/C++和Fortran代码的工具包,线性代数.傅里叶变换和随机数生成函数等.NumPy提供了两种基本的对象:nd ...
- iOS开发常用三方库、插件、知名博客
TimLiu-iOS iOS开发常用三方库.插件.知名博客等等,期待大家和我们一起共同维护,同时也期望大家随时能提出宝贵的意见(直接提交Issues即可). 持续更新... 版本:Objective- ...
- python标准库和第三方库_python常用标准库及三方库
python 常用标准库及三方库 作者: yegle 链接: https://www.zhihu.com/question/20501628/answer/153211 84 著作权归作者所有.商业转 ...
- B端常用9大开源组件库集合(必备收藏)
假如你要研发一款To B Web端产品,面对眼花缭乱的开源组件库要如何选? 哪些又是目前业内团队常用的B端开源组件库? 由于知果负责公司Hundsun Design设计体系的构建,因此对组件库比较了解 ...
- python常用标准库有哪些-Python开发中常用的标准库
大多数基于 Python 开发的应用程序都会用到本地标准库和三方库,这样不仅能让我们把时间去关注真正的业务开发,也能学习到更多价值含量高的程序设计和开发思想.程序开发中有一句著名的话叫做: Don't ...
- python async socket_Python开发中常用的标准库,这些都是你应该掌握的
大多数基于 Python 开发的应用程序都会用到本地标准库和三方库,这样不仅能让我们把时间去关注真正的业务开发,也能学习到更多价值含量高的程序设计和开发思想.程序开发中有一句著名的话叫做: Don't ...
- iOS最全的三方库、插件、博客汇总
目录 UI@ 日历三方库@ 下拉刷新@ 模糊效果@ 富文本@ 图表@ 颜色@ 表相关@(TabbleView.Tabbar.即时聊天界面) TableView@ CollectionView@ 隐藏与 ...
- Android解析JSON,你真的需要三方库?
一般情况下,如果服务器返回 JSON 数据,而且你又是做 Android 的,那么你首先想到的可能是GSON,或是fastJson这样的框架.这些框架能够很方便和快速的让我们将 JSON 转换成本地对 ...
- 【C语言】标准库(头文件、静态库、动态库),windows与Linux平台下的常用C语言标准库
一.Introduction 1.1 C语言标准库 1.2 历代C语言标准 1.3 主流C语言编译器 二.C语言标准库 2.1 常用标准头文件 2.2 常用标准静态库 三.windows平台 四.Li ...
最新文章
- Python数据处理篇之Matplotlib系列(六)---plt.hist()与plt.hist参数详解
- 第三周项目一-个人所得税计算器
- 无法识别system.web.extensions的处理方法
- wxWidgets:wxAuiManager类用法
- 解决IntelliJ IDEA报错Error:Cannot determine path to ‘tools.jar‘ library for 17 (C:\Program Files\Java\jd
- html Window与document区别(轉)
- Hibernate所用15个jar包
- emui换鸿蒙内核,华为EMUI 11.1三月上线,安卓内核替换为鸿蒙内核
- Hibernate概述
- 安装 mysql 数据库, 并做 主 从(二)
- Java核心技术卷1 如何阅读?
- LNMP一键安装脚本(执行后只需等待即可)
- openvino系列 13. 使用 OpenVINO 多模型级联使用:车辆检测与识别示例
- vue+cropperjs实现图片裁剪功能——PC端+移动端——技能提升
- android4k分辨率,4k手机有哪些 4k分辨率是多少【图文】
- 用R进行一元线性回归分析建模
- 什么是软文推广?如何才能把软文推广的更好呢?
- 软件工程结对开发——返回一个整数数组中最大子数组的和(JAVA)
- Ubuntu 16.04/18.04/20.04/deepin v20安装insight的方法
- 简述同步和异步的区别