Rust 编程学习笔记Day 1

105 阅读2分钟

先从安装运行开始,搞出开发环境。

===================

安装

Unix:直接运行

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

安装完成后,就可以创建项目了。

cargo new first

当运行完,就会创建一个名为first的项目文件夹。

默认main.rs里就是经典的 hello world。

fn main() {
    println!("Hello world!");
}

接着在Cargo.toml的依赖项里加入reqwest和html2md

[dependencies]
reqwest = { version = "0.11", features = ["blocking"] }
html2md = "0.2"

main.rs修改如下:

use std::fs;
fn main() {
    let url = "https://www.rust-lang.org/";
    let output = "rust.md";
    println!("Fetching url: {}", url);
    let body = reqwest::blocking::get(url).unwrap().text().unwrap();
    println!("Converting html to markdown...");
    let md = html2md::parse_html(&body);
    fs::write(output, md.as_bytes()).unwrap();
    println!("Converted markdown has been saved in {}.", output);
}

这里主要使用了reqwest库用来网络请求, html2md 从名字就能看得出 解析html成markdown格式。

运行 cargo run

会经过一段漫长的编译,开始运行,先请求rust官网,然后解析成markdown写入文件。

可以看到 在rust里项目管理工具 是cargo,类似 Node里的npm, Golang里的go。

rust语法偏C/C++风格

  1. 函数用{}

  2. 表达式结束用;

  3. 访问结构成员字段,或函数用 .

  4. 访问命名空间用::

  5. 不想在代码里 使用std::fs() 可以直接use std::fs,这样就可以在代码里直接使用fs()函数了。

  6. 入口函数是main()

  7. 强类型语言,但编译器也支持类型推导。

rust 还有一些特点:

  1. rust变量默认是不可变的,如果要修改变量的值,需要显式的使用mut关键字。

  2. 除了let/static/const/fn 等少数语句外,rust绝大多数代码都是表达式。 所以if/while/for /loop都会返回一个值,函数里的最后一个表达式就是返回值。

  3. 支持面向接口,泛型。 Go好像在1.18才支持泛型。

  4. 丰富的数据类型和强大的标准库。 (貌似任何一个说自己语言的好的,是不是都可以这么说?)

  5. 丰富的控制流 比如 模式匹配(pattern match)

不过个人感觉刚上手有点不是太适应的地方。

  1. fn 虽然简单但是不如写全function

  2. 如果代码里使用某些命名空间,头部不能自动导入 use。 这一点go做的相对自动一些。

  3. 感觉既然是强类型,就不要松开类型推导这个口子。不然有点混乱,

总体感觉就是 既要还要。

明天接着学 Rust的基本语法和数据结构。