Rust - 包管理器



Cargo 是 Rust 的包管理器。它像一个工具,用于管理 Rust 项目。

下面表格列出了一些常用的 Cargo 命令:

序号 命令及描述
1

cargo build

编译当前项目。

2

cargo check

分析当前项目并报告错误,但不生成目标文件。

3

cargo run

构建并执行 src/main.rs。

4

cargo clean

删除 target 目录。

5

cargo update

更新 Cargo.lock 中列出的依赖项。

6

cargo new

创建一个新的 Cargo 项目。

Cargo 帮助下载第三方库。因此,它充当包管理器。您还可以构建自己的库。安装 Rust 时默认安装 Cargo。

要创建一个新的 Cargo 项目,我们可以使用以下命令。

创建二进制 crate

cargo new project_name --bin

创建库 crate

cargo new project_name --lib

要检查 Cargo 的当前版本,请执行以下命令:

cargo --version

示例 - 创建一个二进制 Cargo 项目

游戏生成一个随机数并提示用户猜测该数字。

步骤 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,它可在 crates.io 网站上找到 crates.io

rand 是一个用于随机数生成的 Rust 库。Rand 提供实用程序来生成随机数,将它们转换为有用的类型和分布,以及一些与随机性相关的算法。

下图显示了 crates.io 网站和 rand crate 的搜索结果。

external libraries

将 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 ..
广告