语言特点
- 内存安全
- 高性能
- 强类型语言,但具有自动判断变量类型的能力
- 不允许精度有损失的自动数据类型转换
编译与依赖管理
编译
1
rustc runoob.rs
配置文件
1
2
3
[profile.dev]
opt-level = 1 # Use slightly better optimizations.
overflow-checks = false # Disable integer overflow checks.
整数溢出检测
dev配置中, 整数溢出默认检测, 触发panicrelease配置中,整数溢出不检测
项目管理
自带cargo
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
cargo --help #查看 Cargo 的帮助信息。
cargo new <ProjectName> <--lib> #创建新项目
cargo test #运行当前项目的单元测试。
cargo build [--release]
cargo run [--release]
cargo clean #清理构建过程中生成的临时文件和目录
cargo check #检查当前项目的语法和类型错误。
cargo update #更新 Cargo.toml 中指定的依赖项到最新版本。
cargo publish #将 Rust 项目发布到 crates.io。
cargo clippy #类似eslint,lint工具检查代码可以优化的地方
cargo fmt #类似go fmt,代码格式化
cargo tree #查看第三方库的版本和依赖关系
cargo bench #运行benchmark(基准测试,性能测试)
cargo udeps #检查项目中未使用的依赖
组织管理
包
Rust包由Cargo.toml文件中的[package]部分定义,也称为清单。在[package]内,你可以设置包的元数据,比如名称和版本。
目标 crate 在一个包内部,你可以有一个或多个crate,也称为目标。最常见的两种crate类型是二进制crate和库crate.
约定
依赖管理
包可以通过在它的Cargo.toml文件的[dependencies]部分列出其他包来依赖它们。指定依赖最常用的方式是提供其名称和版本号:
自动获取依赖
1
2
[dependencies]
thiserror = "1"
手动路径依赖
1
2
[dependencies]
my-library = { path = "../my-library" }
开发依赖(只在开发过程中引入)
1
2
[dev-dependencies]
static_assertions = "1.1.0"
管理
内联模块
1
2
3
//内联模块:模块声明和模块内容一起
mod ModName{
}
模块树
- 模块可以嵌套,形成树状结构。树的根是crate本身,即包含所有其他模块的顶级模块。对于库,根模块通常是
src/lib.rs(除非位置被自定义过)。 - 根模块也被称为crate根。
- 根模块可以有子模块,它们反过来也有自己的子模块,以此类推。
模块分文件
在父模块里,用mod关键字声明子模块的存在。
mod dog;
模块声明在crate的根目录(如src/lib.rs或src/main.rs)
src/<module_name>.rssrc/<module>/mod.rs
模块是另一个模块的子模块,文件应命名为:
[..]/<parent_module>/<module>.rs[..]/<module>/mod.rs
比如,如果是animals的子模块,那么src/animals/dog.rs或src/dog/mod.rs。
项路径与访问
-
同一模块里的项可以直接访问
- 从不同模块访问实体,要用指向要访问实体的路径
- 从当前crate根开始,比如
crate::module_1::module_2::MyStruct - 从父模块开始,比如
super::my_function - 从当前模块开始,比如
sub_module::MyStruct
- 从当前crate根开始,比如
- 使用use引入到作用域
- 使用
*引入模块中所有项目
- 使用
可见性
Rust中,默认一切都是私有的, 私有实体只能在以下情况下被访问:
- 定义它的同一个模块内部,或
- 其子模块之一
可见性修饰符 你可以使用可见性修饰符来修改实体的默认可见性:
pub:使实体公开,在定义模块之外也能访问,可能还允许其他crate访问。pub(crate):在同一个crate内部公开实体,但不允许外部访问。pub(super):在父模块中公开实体。pub(in path::to::module):在指定的模块中公开实体。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
pub struct{
pub(crate)version:u32,
}
pub mod ticket {
pub struct Ticket {
title: String,
description: String,
status: String,
}
impl Ticket {
pub fn new() {
}
}
}
- 访问路径
- 相对路径
self:: - 绝对路径
crate::
- 相对路径
- 访问权限
- public
pub modpub fn - private (默认)
- public
- 引入当前作用域
use crate::
使用总结
对于不进行修改,只进行读取的参数, 使用引用的方式进行传参.