javaer学rust(二)

2022-09-17  本文已影响0人  yiang飞扬

按照之前的规划,我们先实现一个下载文件的功能,在此之前我们先部署一个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

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

上一篇 下一篇

猜你喜欢

热点阅读