Rust 包管理器
Cargo是Rust的包管理器。它类似于一个工具,用于管理Rust项目。
下表列出了一些常用的cargo命令:
序号 | 命令和说明 |
---|---|
1 | cargo build 编译当前项目。 |
2 | cargo check 分析当前项目并报告错误,但不构建目标文件。 |
3 | cargo run 构建并执行src/main.rs。 |
4 | cargo clean 删除目标目录。 |
5 | cargo update 更新Cargo.lock中列出的依赖项。 |
6 | cargo new 创建一个新的cargo项目。 |
Cargo帮助下载第三方库。因此,它的作用类似于包管理器。您也可以构建自己的库。安装Rust时,默认会安装Cargo。
要创建一个新的Cargo项目,我们可以使用下面给出的命令。
创建一个二进制crate
cargo new project_name --bin
创建一个库箱
cargo new project_name --lib
要检查当前版本的货物,请执行以下命令 –
cargo --version
示例 – 创建一个二进制货物项目
游戏生成一个随机数,并提示用户猜测这个数。
步骤1 – 创建一个项目文件夹
打开终端并输入以下命令 cargo new guess-game-app –bin .
这将创建以下文件夹结构。
guess-game-app/
-->Cargo.toml
-->src/
main.rs
命令 cargo new 用于创建一个 crate。标志 --bin 指示正在创建的 crate 是一个二进制 crate。公共 crate 存储在一个名为 crates.io 的中央仓库中 https://crates.io/ 。
步骤 2 – 引用外部库
这个示例需要生成一个随机数。由于内部标准库没有提供随机数生成逻辑,我们需要查找外部库或 crate。让我们使用 rand crate,该 crate 可在 crates.io 网站上获取 crates.io
https://crates.io/crates/rand 是一个用于随机数生成的 Rust 库。Rand 提供生成随机数、将它们转换为有用的类型和分布以及一些与随机性相关的算法的实用工具。
下图显示了 crate.io 网站和 rand crate 的搜索结果。
将 rand crate 的版本添加到 Cargo.toml 文件中 rand = “0.5.5” .
[package]
name = "guess-game-app"
version = "0.1.0"
authors = ["Mohtashim"]
[dependencies]
rand = "0.5.5"
步骤3:编译项目
导航到项目文件夹。在终端窗口中执行以下命令 cargo build -
Updating registry `https://github.com/rust-lang/crates.io-index`
Downloading rand v0.5.5
Downloading rand_core v0.2.2
Downloading winapi v0.3.6
Downloading rand_core v0.3.0
Compiling winapi v0.3.6
Compiling rand_core v0.3.0
Compiling rand_core v0.2.2
Compiling rand v0.5.5
Compiling guess-game-app v0.1.0
(file:///E:/RustWorks/RustRepo/Code_Snippets/cargo-projects/guess-game-app)
Finished dev [unoptimized + debuginfo] target(s) in 1m 07s
rand crate和所有传递依赖项(rand的内部依赖项)将自动下载。
步骤4-理解业务逻辑
现在让我们看看猜数字游戏的业务逻辑是如何工作的-
- 游戏最初生成一个随机数。
-
要求用户输入并猜测数字。
-
如果数字小于生成的数字,则打印消息“太低”。
-
如果数字大于生成的数字,则打印消息“太高”。
-
如果用户输入程序生成的数字,则游戏退出。
步骤5-编辑main.rs文件
将业务逻辑添加到main.rs文件中。
use std::io;
extern crate rand;
//importing external crate
use rand::random;
fn get_guess() -> u8 {
loop {
println!("Input guess") ;
let mut guess = String::new();
io::stdin().read_line(&mut guess)
.expect("could not read from stdin");
match guess.trim().parse::<u8>(){ //remember to trim input to avoid enter spaces
Ok(v) => return v,
Err(e) => println!("could not understand input {}",e)
}
}
}
fn handle_guess(guess:u8,correct:u8)-> bool {
if guess < correct {
println!("Too low");
false
} else if guess> correct {
println!("Too high");
false
} else {
println!("You go it ..");
true
}
}
fn main() {
println!("Welcome to no guessing game");
let correct:u8 = random();
println!("correct value is {}",correct);
loop {
let guess = get_guess();
if handle_guess(guess,correct){
break;
}
}
}
步骤6-编译并执行项目
在终端上执行命令 cargo run 确保终端指向项目目录。
Welcome to no guessing game
correct value is 97
Input guess
20
Too low
Input guess
100
Too high
Input guess
97
You got it ..