命令行应用程序

为什么选择 Rust?

带对勾的盾牌

可靠且速度惊人

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

Rust 的保证
带对勾的箱子

易于分发

将所有内容编译为单个可执行文件,用户无需安装运行时和库。

如何发布 Rust 代码
笔记和齿轮

健壮的配置

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

开始配置
帮助手册

帮助手册?轻松生成。

为应用自动生成手册。只要对生成的文件打包即可轻松获得手册。

了解如何生成手册
管道

数据输入,数据输出

除了与人沟通之外,Rust 还提供了绝佳的工具来帮助您与机器对话。

与机器通信
三块堆叠在一起的木头

灵活的日志记录

添加日志很方便,将其配置到不同的目标或设置为不同的格式也相当容易。

记录,跟踪,了解

易于构建可维护代码

命令行应用程序结构

当场 捕获错误

如果配置文件丢失或损坏怎么办?如果环境变量的内容为空该怎么办?这些情况很容易忘记!但是借助它本身的错误处理方式和库设计,Rust 可以在您运行程序之前发现这些“假设”的情况。

Rust 的错误处理
命令行不是造火箭

方便后续扩展

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(())
}
阅读《命令行指南》了解更多信息

产品应用

Sentry 标志
我们喜欢 Rust 的一个原因是 crates.io 的生态。[......] 现在有很多超棒的的基础设施来构建强大的命令行接口。

– Armin Ronacher, 《Rust 在 Sentry 中的应用》 – PolyConf 2017 大会


我很庆幸有这些代码库。 [......] 使用 Rust 来编写基于命令行或控制台的工具给我带来很大的好处,它针对不同的目标系统进行编译非常方便。

– Fletcher Nichol, 《把 Rust 带进生产环境》 – RustFest Kyiv大会

Habitat 标志