美文网首页
javaer学rust(二)

javaer学rust(二)

作者: yiang飞扬 | 来源:发表于2022-09-17 10:23 被阅读0次

按照之前的规划,我们先实现一个下载文件的功能,在此之前我们先部署一个go-fastdfs服务,go-fastdfs服务可以直接github上查找,部署好后上传一个文件用于下载。
talk is cheap,直接贴代码

#[tokio::main]
async fn main() {
    let file_url="http://localhost:8234/group2/default/20220915/17/13/4/test.txt";
    let body = reqwest::get(file_url)
        .await
        .unwrap()
        .text()
        .await
        .unwrap();
    println!("body = {:?}", body);
}

上面代码的实现了下载网络文件的功能,但是如果直接运行这段代码肯定会报错的,原因有两个:
1、里面用到了reqwest和tokio库,需要加入到项目依赖,配置方式是在项目的Cargo.toml文件的[dependencies]部分加入相关依赖,类似java的maven依赖

[dependencies]
reqwest = { version = "0.11.11", features = ["json"] } # reqwest with JSON parsing support
#futures = "0.3" # for our Async / await blocks
tokio = { version = "1.12.0", features = ["full"] }

2、文件地址需要改成真实存在的一个地址

下面就代码的几个知识点简单说下(主要和java做个对比)
1、方法定义: rust使用fn定义方法,代码里面的main是简化的方法定义,省略了方法参数、返回值以及生命周期及约束条件等。以reqwest的get方法为例:

pub async fn get<T: IntoUrl>(url: T) -> crate::Result<Response> 

其中pub表示该方法是公开的,相当于java的public修饰符,不写的话默认是private的,async表示方式为异步调用,也是可选项,如果方法里面调用了异步方法,则需要在方法上声明

2、变量定义:rust使用let定义变量,但这里定义的变量是不能修改值的,类似java的final,这里面涉及到了rust所有权的概念,后面再介绍,如果要使变量值可以修改的话,定义的时候需要加上mut修饰

let mut file_url="http://xxxx.xxxx.xxx"

3、rust宏:分为声明宏和代码宏,便于代码复用,代码中的#[tokio::main]就是声明宏,java开发者可以理解成注解

4、命名规范:java变量及方法一般都推荐使用驼峰命名方式,但rust推荐snake-case命名方式

5、::,双冒号是函数引用的意思,代码中的reqwest::get(file_url)表示执行reqwest的get方法,类似于java的class.method(),这里的reqwest是rust的mod

先简单做个介绍,后面我们就在此基础上逐渐完善

相关文章

  • javaer学rust(二)

    按照之前的规划,我们先实现一个下载文件的功能,在此之前我们先部署一个go-fastdfs服务,go-fastdfs...

  • javaer学rust(四)

    之前实现了文件上传下载的功能,这次我们利用go-fastdfs实现一个分片上传的功能,按照惯例,先贴代码 这段代码...

  • Javaer学rust(七)

    前面我们实现了一个简陋的线程池,其中线程worker会轮询去线程池的队列里面获取要执行的线程,有就执行,没有就不执...

  • Javaer学rust(六)

    前面我们通过多线程完成了文件分片上传,但如果分片多了,会创建比较多的线程,线程多了切换就会带来比较大的开销,下面我...

  • javaer学rust(八)

    文件上传下载先暂告一段落,接下来我们来开发授权服务。我们选用actix-web框架进行开发,其它的框架还有rock...

  • Javaer学rust(五)

    在前面,我们使用多线程的时候,因为所有权的原因,我们把相关变量都通过clone复制了一遍,这肯定不是好办法,经过查...

  • javaer学rust(一)

    最近研究了下rust,看了些相关资料,很多地方还是半知半解,想着写个demo练练手,正好手头在弄一个文件服务器,便...

  • javaer学rust(三)

    在上一篇,我们写了一个只有main方法的demo,实现了下载网络文件的功能,但基于代码复用的思想,我们可以把下载的...

  • RUST学习资源

    《通过例子学 Rust》 《Rust by Example》 《Rust 程序设计语言(第一版)》 《Rust 程...

  • rust与c,c++,go,java性能比较

    一,rust与c 二,rust与c++ 三,rust与go 四,rust与java

网友评论

      本文标题:javaer学rust(二)

      本文链接:https://www.haomeiwen.com/subject/fiqdortx.html