rust初识及rust的esapi(代码片段)

双斜杠少年 双斜杠少年     2022-12-11     132

关键词:

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)中才稳定下来。希望可以通过这边文章在提高自己认知的情况下,也可以给读者... 查看详情