按照之前的规划,我们先实现一个下载文件的功能,在此之前我们先部署一个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
先简单做个介绍,后面我们就在此基础上逐渐完善
网友评论