关键词:
Rust
Rust是一门系统编程语言 ,专注于安全 ,尤其是并发安全,支持函数式和命令式以及泛型等编程范式的多范式语言。Rust在语法上和C++类似 ,但是设计者想要在保证性能的同时提供更好的内存安全。
Rust致力于成为优雅解决高并发和高安全性系统问题的编程语言 [10] ,适用于大型场景,即创造维护能够保持大型系统完整的边界。这就导致了它强调安全,内存布局控制和并发的特点。
安装
curl https://sh.rustup.rs -sSf | sh
安装完成后,开始在idea 中配置rust 环境(后来发现cLion 编译器对 rust 支持更好,支持api智能提示)
然后新建rust 项目
概念特性
关于rust 的特性和概念,我也是初始。其中“所有权”概念和“生命周期”概念比较独特,可以多关心一下。
下面是一些我觉得比较好的文档 记录一下:
通过例子学 Rust
官方文档
github 指南
官网入口
仓库,类似maven的 mvnrepository 里面各种包的文档很详细
Es
最后贴上用rust 操作es的小 demo
use elasticsearch::auth::Credentials, Elasticsearch, Error, SearchParts, CreateParts;
use url::Url;
use serde_json::json, Value;
use elasticsearch::http::Method;
use elasticsearch::http::headers::HeaderMap;
///!默认链接
pub async fn get_client() -> Result<(), Box<dyn std::error::Error>>
let client = Elasticsearch::default();
let body = b"\\"query\\":\\"match_all\\":";
let response = client
.send(
Method::Post,
SearchParts::IndexType(&["user_index"], &["user"]).url().as_ref(),
HeaderMap::new(),
Option::<&Value>::None,
Some(body.as_ref()),
)
.await?;
let response_body = response.json::<Value>().await?;
let took = response_body["took"].as_i64().unwrap();
for hit in response_body["hits"]["hits"].as_array().unwrap()
println!(":?", hit["_source"]);
Ok(())
use elasticsearch::http::transport::SingleNodeConnectionPool, TransportBuilder;
///!包含验证信息的客户端链接
pub async fn get_client_credentials() -> Result<(), Box<dyn std::error::Error>>
let url = Url::parse("http://localhost:9200")?;
let conn_pool = SingleNodeConnectionPool::new(url);
let credentials = Credentials::Basic("".into(), "".into());
let transport = TransportBuilder::new(conn_pool).auth(credentials).build()?;
let client = Elasticsearch::new(transport);
let response = client
.search(SearchParts::IndexType(&["user_index"], &["user"]))
.from(0)
.size(10)
.body(json!(
"query":
"match_all":
))
.send()
.await?;
let response_body = response.json::<Value>().await?;
let took = response_body["took"].as_i64().unwrap();
for hit in response_body["hits"]["hits"].as_array().unwrap()
// print the source document
println!(":?", hit["_source"]);
Ok(())
///!保存数据
pub async fn put_data() -> Result<(), Box<dyn std::error::Error>>
let url = Url::parse("http://localhost:9200")?;
let conn_pool = SingleNodeConnectionPool::new(url);
let credentials = Credentials::Basic("".into(), "".into());
let transport = TransportBuilder::new(conn_pool).auth(credentials).build()?;
let client = Elasticsearch::new(transport);
let response = client.create(CreateParts::IndexTypeId("user_index", "user", "100001"))
.body(json!(
"id": "100001",
"user_name": "yang",
"mobile": "15683799234",
"birth": "1999-06-15",
"gender": "1",
"age": "26",
"height": "175",
"weight": "65",
"update_time": "2020-02-02 20:20:20"
)).send().await?;
let successful = response.status_code().is_success();
Ok(())
///!批量保存
pub async fn batch_save_portrait(maps: Vec<Map<String, Value>>) -> Result<(), Box<dyn std::error::Error>>
println!(",", "批量保存画像", maps.len());
let mut bodys: Vec<JsonBody<_>> = Vec::with_capacity(11000);
for map in maps
//保存到es 的 id,必须得传
bodys.push(json!("index": "_id": map.get("user_id")).into());
//map 为键值对 转化为 jsonBody
bodys.push(JsonBody::from(Value::Object(map)).into());
let client = establish_connection();
let response = client.client
.bulk(BulkParts::IndexType("user_index_v1", "user"))
.body(bodys)
.send().await?;
let successful = response.status_code().is_success();
println!("successful----->", successful);
Ok(())
所有调用 async 方法的方法 都要用 async 修饰
启动类 main.rs
mod es_client_test;
mod fusion_portrait;
mod es_client;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>>
println!("Hello, world!");
fusion_portrait::get_all_key().await;
Ok(())
Cargo.toml 文件
[package]
name = "rust-one"
version = "0.1.0"
authors = ["xxxxxxx@qq.com>"]
edition = "2018"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
#引用包
[dependencies]
elasticsearch = "7.7.0-alpha.1"
serde = "~1"
serde_json = "~1"
url = "2.1.1"
tokio = "0.2.20"
dgraph-tonic = "0.5.0"
threadpool = "1.8.0"
rayon = "1.3.0"
rust语言圣经05-初识cargo(代码片段)
原文链接:https://course.rs/about-book.html 欢迎大家加入Rust编程学院,中国最好的Rust学习社区官网:https://college.rsQQ群:1009730433认识Cargo但凡经历过C/C++、Go语言1.10版本之前的用户都知道,一个好的包管理工... 查看详情
win10下我的第一个rust程序的编译及运行(代码片段)
新建一个rust程序main.rs,内容如下:fnmain()println!("hello,world!");命令行运行rustcmain.rs报错如下:>rustc.main.rserror:linker`link.exe`notfound|=note:系统找不到指定的文件。(oserror2)note:themsvctargetsdependonthemsvc 查看详情
rust学习总结——初识rust,作为新势力它的前景如何?
前言在StackOverflow2020调查中,Rust被选为最受欢迎的编程语言第一名,这要归功于86%的开发人员表示他们会继续使用它。对于语言创造者来说,这并不是什么新鲜事——Rust自2016年以来一直在这项调查中获胜。在Tiobe指... 查看详情
rust机器学习之tch-rs(代码片段)
...09;,相关教程请参考Rust交互式编程环境搭建文章目录初识tch-rsPyTorchvs.TensorFlow安装tch-rs用tch-rs搭建简单神经网络环境准备实现思路准备数 查看详情
一天一门编程语言rust语言程序设计极简教程(代码片段)
...使用四、Rust智能指针的优缺点优点缺点Rust语言异步编程代码实例什么是异步编程Rust的异步编程实现使用FutureAPI的示例使用async/await语法小结Rust语言实现斐波那契数列代码实例:循环与递归1.什么是斐波那契数列2.Rust语言实... 查看详情
rust文件读写(代码片段)
https://www.twle.cn/c/yufei/rust/rust-basic-file-input-output.htmlRust文件读写Rust标准库提供了大量的模块和方法用于读写文件。Rust语言使用结构体 File 来描述/展现一个文件。结构体 File 有相关的成员变量或函数用于表示程序可... 查看详情
markdown使用reqwest和dotenv#rust的rust客户端(代码片段)
rust网络编程框架-tokio进阶(代码片段)
...市面上绝大多数编程语言所编写的程序,执行程序与代码编写顺序完全相同,当然有的读者可能会提到CPU的乱序执行机制,但乱序执行从本质上讲还是顺序提交的,程序 查看详情
rust为什么我建议你学一下rust|rust初探(代码片段)
文章目录一、Rust的特点二、快速了解1.安装环境2.查看版本3.HelloWorld三、总结一、Rust的特点Rust是一种多范式、通用编程语言,旨在提高性能和安全性,尤其是安全并发性。Rust在语法上类似于C++,但可以通过使... 查看详情
rust学习1(代码片段)
1.为什么学习rust官网的解释如下,性能好,可靠,生产力。我的理由,想看看怎么保证内存安全与线程安全的 1.环境搭建去网站下载对应的rustup-init https://forge.rust-lang.org/infra/other-installation-methods.html然后按照操作... 查看详情
rust琐碎(代码片段)
更新rustupupdaterust圣经https://doc.rust-lang.org/book/一份中文的手册,忘了从哪点进去的https://kaisery.gitbooks.io/rust-book-chinese/content/content/Getting%20Started%20%E5%87%86%E5%A4%87.htmlrust换源打开$HOME/.cargo/config[ 查看详情
rust编程语言入门(代码片段)
...行。Rust:安全无需GC(性能好速度快)易于维护、调试、代码安全高效Rust特别擅长的领域高性能WebService(WebAPI)WebAssembly命令行工具网络编程嵌入式设备系统编程Rust与FirefoxRust最初是Mazilla公司的一个研究性项目。Firefox是Rust产品应... 查看详情
新手眼中的rust所有权规则(代码片段)
...性。通过提供编译时保证,将可能会导致内存错误的标志代码标记为编译时错误来做到这一点。编译时保证是通过所有权规则来实现。在这篇文章中,我总结了Ru 查看详情
在rust-cpython中将rust结构转换为pyobject(代码片段)
我正在使用rust-cpython来编写可在Python中调用的Rust函数。我有一个用作输出的现有结构。如何将其转换为rust-cpython可以理解的PyObject?我的结构看起来像这样:structBlockstart:i32,stop:i32,答案我的编译错误说我需要在我的struct上实现ToP... 查看详情
sh使用rust的常用命令(代码片段)
idea搭建rust开发环境,解决不识别rust工程的解决办法(代码片段)
Rust 是一个由Mozilla主导开发的通用编译型编译语言。它的设计准则为"安全,并发,实用",支持函数式,并发式,过程式以及面向对象的编程风格。Rust插件的主要特性如下:导航特性:GotoClass、GotoSymbol、GotoSuper... 查看详情
rust区块链开发包(代码片段)
Rust是新一代的潜力巨大的开发语言。本文编辑整理了9个主流的用于以太坊、比特币、tendermint、eosio、polkadot等区块链开发的Rust包,可用于区块链应用的快速开发。区块链开发教程链接: 以太坊 | 比特币 | EOS | Tenderm... 查看详情
rust异步浅谈(代码片段)
https://rustcc.cn/article?id=e6d50145-4bc2-4f1e-84da-c39c8217640b前提 这篇文章主要描述了Rust中异步的原理与相关的实现,Rust异步也是在最近的版本(1.39)中才稳定下来。希望可以通过这边文章在提高自己认知的情况下,也可以给读者... 查看详情