大家好呀,今天是周三,有机会早点下班给大家继续分享rust 入门相关内容,上期文章我们重点介绍了如何在不同的操作系统,linux, window,类unix,mac上进行rust 的安装和使用vscode 作为ide 进行简单的rust 项目创建和运行。
今天,我们继续上一次的入门教程1,介绍下,一个简单的二进制rust 项目,分为哪几个部分,rust 的基本语法等相关内容。
如下图是我们上次创建的全新的rust 二进制项目:
一个二进制项目由几个部分组成,我们先看左边的目录,当你使用cargo new TOUTIAO 创建一个名字为TOUTIAO的项目时, rust 会创建一个名为TOUTIAO的文件夹,文件夹中存在src 目录,下面保存我们的main.rs ,程序入口文件。与src 目录同级的,还有Cargo.toml文件,作为项目的包管理和配置文件存在。
其中的target 目录和Cargo.lock 是编译后生成的,看过我前一期的同学,应该都安装了rust analyzer, 如果安装了插件,则它会自动编译生成这两个文件。
这两个文件的作用我们下面再说。
先来说一下cargo.toml 文件,如下图所示:
如果你没有配置git啥的自我身份认证信息,那么生成的结果大概率如上所示,一个最简单的rust 配置文件。它使用 toml , 这种简单易配置的格式进行项目配置。
其中第一个[package] 下面全部是描述我们新建的可执行文件的信息。它的名字啊,版本,使用的rust 版本啊等等。
而第二个[dependencies] 就是三方依赖填写的位置,由于我们是个新建的项目,还没有引入三方包,所以此处为空。(后续课程示例会进行引入)。
然后再来说一下Cargo.lock 文件,这个文件是rust 多版本管理的一个用起来很舒服顺手的创新,十分方便项目的移植,能够保证同一个项目在不同的机器上运行时,不需要进行版本配置等繁琐的手动配置。
我们来举一个例子,如下图:
如上图是一个没有引入任何三方包的cargo.lock,我们发现,其实就没啥内容,就是上面提到过的一些本包的信息。
然后我们引入一个rust 里最常用的rand 随机数包。
此时,你如果安装了rust analyzer,会看到下面的小齿轮会转一会儿,然后把rand 包进行引入和重新编译。
之后,我们观察cargo.lock文件的内容,
我们发现,就因为我们引入了一个rand 包,cargo.lock 就变成了一副我们完全不认识的模样。
其实Cargo.lock 会记录rand包以及rand 包此版本所依赖的所有包的信息,把所有递归依赖进行了记录,这样,别人下载了你的代码,在本地进行运行时,就可以快速且准确的知道需要哪些依赖,这些都在lock文件中记录并且自动下载和编译,这样,就保证了项目跨电脑,跨平台编译的统一性。
最后,我们来看下rust 的main.rs 文件,看一下一个最简单的rust 程序组成。
如下图:
1、 rust 默认也是从main 函数作为入口函数进行执行,每个二进制可执行的rust 程序必须含有一个main 函数入口。
2、 rust 函数使用关键字fn 进行定义,然后我们使用了println! 这个宏(注意,此处是rus 宏的使用,不是函数,println 后面的!是感叹号,代表是一个宏)进行了字符串hello world 的打印。
我们也可以修改一下,打印一些其它的东西,比如:
上面的代码运行结果如下所示:
我们看到,直接使用cargo run 运行程序,得到跟上面代码编写的内容一致的打印内容到命令行窗口中。