命令行应用程序

为什么选择 Rust?

Shield with a checkmark

稳定且快速

即使您只是编写一个简短的一次性脚本,您也可以确信它速度快、易于测试,并提供有用的输出。

Rust 的保证
box with a checkmark

轻松分发

将所有内容编译成单个二进制文件 - 无需用户安装运行时或库。

如何发布 Rust 代码
A note and a gear

强大的配置

轻松处理跨平台的配置文件。Rust 将为您处理命名空间和格式。

开始配置
Help manual

手册?完成。

自动为您的应用程序生成手册页。只需打包生成的的文件,您就完成了。

学习方法
Pipes

数据输入,数据输出

除了与人类交流之外,Rust 还拥有强大的工具来帮助您与机器交流。

与机器通信
3 wood logs stacked on top of each other

灵活的日志记录

添加日志记录很容易,配置它到不同的目标和不同的样式也更容易。

日志、跟踪、理解

可维护的代码库

cli app structure

现在捕获错误

如果配置文件丢失或损坏怎么办?如果那个环境变量的内容为空怎么办?这些情况很容易忘记!但由于 Rust 对错误处理和库设计的方法,Rust 会在您运行程序之前指出这些“如果”情况。

Rust 的错误处理
cli is no rocket science

以后轻松扩展

Rust 允许您灵活地组织代码。从单个文件开始,当您需要更多功能时,可以重构您的应用程序,并确信您不会破坏任何东西。

重构 Rust

开始吧!

编写命令行应用程序是学习 Rust 的好方法。

定义您的输入

use clap::Parser;

/// Read some lines of a file
#[derive(Debug, Parser)]
struct Cli {
    /// Input file to read
    file: String,
    /// Number of lines to read
    #[structopt(short = 'n')]
    num: usize,
}

编写您的工具

use std::{error::Error, fs::read_to_string};

fn main() -> Result<(), Box> {
    let args = Cli::parse();
    read_to_string(&args.file)?
        .lines()
        .take(args.num)
        .for_each(|line| println!("{}", line));
    Ok(())
}
通过 CLI 书籍了解更多

生产使用

sentry logo
我们喜欢 Rust 的原因之一是 crates.io 生态系统。[...] 已经存在很多非常好的基础设施来构建非常好的命令行界面。

– Armin Ronacher, Rust 在 Sentry - PolyConf 2017


我对生活在这个代码库中毫无遗憾。[...] 这对我来说是一个额外的奖励:使用 Rust 制作基于 CLI 或控制台的工具。它非常擅长为不同的目标系统编译。

– Fletcher Nichol, 将 Rust 推向生产 - RustFest 基辅

Habitat logo