命令行界面 (CLI)

概览

CLI 开发者青睐 Go 的可移植性、性能和易用性

命令行界面 (CLI) 与图形用户界面 (GUI) 不同,它是纯文本的。云和基础设施应用程序主要是基于 CLI 的,因为它们易于自动化和具备远程功能。

主要优势

利用快速编译时间构建能够快速启动并在任何系统上运行的程序

CLI 开发者发现 Go 非常适合设计他们的应用程序。Go 编译速度非常快,可以编译成单个二进制文件,以一致的风格跨平台工作,并拥有强大的开发社区。开发人员可以在几秒钟内,通过一台 Windows 或 Mac 笔记本电脑,为 Go 支持的数十种架构和操作系统中的每一种构建一个 Go 程序,无需复杂的构建农场。没有其他编译语言可以如此便携或快速地构建。Go 应用程序被构建成一个单一的自包含二进制文件,使得 Go 应用程序的安装变得轻而易举。

具体来说,用 Go 编写的程序可以在任何系统上运行,无需任何现有库、运行时或依赖项。而且,用 Go 编写的程序启动时间很短——类似于 C 或 C++,但其他编程语言无法做到。

用例

使用 Go 构建优雅的 CLI

在 Go 中开发 CLI 时,Cobra 和 Viper 是两个广泛使用的工具。

Cobra 既是一个用于创建强大的现代 CLI 应用程序的库,也是一个用于在 Go 中生成应用程序和 CLI 程序的工具。Cobra 为大多数流行的 Go 应用程序提供支持,包括 CoreOS、Delve、Docker、Dropbox、Git Lfs、Hugo、Kubernetes,以及更多。凭借集成的命令帮助、自动完成和文档功能,“它让每个命令的文档编写变得非常简单,”OpenFaaS 创始人Alex Ellis说道。

Viper 是一个完整的 Go 应用程序配置解决方案,旨在在应用程序内部处理配置需求和格式。Cobra 和 Viper 被设计成协同工作。

Viper 支持配置中的嵌套结构,允许 CLI 开发者管理大型应用程序多个部分的配置。Viper 还提供了构建十二因子应用程序所需的所有工具。

“如果你不想污染你的命令行,或者你正在处理敏感数据,不希望它出现在历史记录中,那么使用环境变量是一个好主意。为此,你可以使用 Viper,”Geudens 建议

客户 简介 使用 Go 的项目
Comcast Comcast Comcast Comcast 使用 Go 开发了一个 CLI 客户端,用于发布和订阅其高流量站点。该公司还支持一个用 Go 编写的开源客户端库——专为 Apache Pulsar 工作而设计。
GitHub GitHub GitHub GitHub 使用 Go 开发了一个命令行工具,它通过包装 git 来扩展其额外功能和命令,从而更轻松地使用 GitHub。
Hugo Hugo Hugo Hugo 是最受欢迎的 Go CLI 应用程序之一,为成千上万的网站提供支持,包括这个网站。它受欢迎的原因之一是它易于安装,这得益于 Go。Hugo 作者 Bjørn Erik Pedersen 写道:“单个二进制文件消除了安装和升级的大部分痛苦。”

开始使用

Go CLI 创建书籍

  • spf13/cobra

    一个用于创建强大现代 CLI 应用程序的库,以及一个用于在 Go 中生成应用程序和 CLI 应用程序的程序

  • spf13/viper

    一个完整的 Go 应用程序配置解决方案,旨在在应用程序内部处理配置需求和格式

  • urfave/cli

    一个用于创建和组织命令行 Go 应用程序的极简框架

  • delve

    一个为习惯于在编译语言中使用源代码级调试器的程序员设计的简单而强大的工具

  • chzyer/readline

    一个纯 Golang 实现,提供了 GNU Readline 的大部分功能(MIT 许可证下)

  • dixonwille/wmenu

    一个易于使用的 CLI 应用程序菜单结构,提示用户进行选择

  • spf13/pflag

    Go 的 flag 包的直接替代品,实现了 POSIX/GNU 风格的 flag

  • golang/glog

    Go 的分级执行日志

  • go-prompt

    一个用于构建强大的交互式提示的库,使使用 Go 构建跨平台命令行工具变得更容易。

查看更多