Go 写的 CLI(Command-line Interface)

因为 Go 的可移植性、卓越的性能以及易于创建的特性,开发者更偏爱使用 Go 来开发 CLI。

CLI(Command-line Interface)与 GUI(GUI,graphical user interface,图形用户界面)不同,CLI 是纯文本的。云计算和基础架构程序具有易于自动化和远程功能的特性,所以云计算和基础架构程序主要是基于 CLI 的。

Quotation mark.

优雅的设计让 Go 可以完美的适合多种应用风格,并且它能够很容易交叉编译成适合多平台的二进制,这让它具有很大的优势。”

Go gopher

CLI 开发者发现 Go 非常适合设计他们的应用程序。Go 项目能够很快地编译成一个单独的二进制文件,并且以一致的风格跨平台工作,并且有一个强大的开发社区。单单使用一台 Windows 电脑或者一台 Mac 笔记本电脑,开发者就能为几十种不同架构体系中的每一种架构构建一个 Go 应用程序,并且操作系统能在几秒钟内就能实现,不需要复杂的构建环境。其他任何编译语言都不可能如此迅速、也不可能具有如此的可移植性。Go 应用程序被构建成一个独立的二进制文件,这使得 Go 应用程序安装变得非常简单。

更重要的是,用 Go 编写的程序可以在任何系统上运行,而不需要任何现有的库、运行时或依赖项 。并且 Go 编写的程序有一个立即启动的时间—类似于 C 或 C++,这是其他编程语言所没有的。

Quotation mark.

由于 CLI 被用来设计可预测的、面向任务的命令,使用 Go 来实现是最好的。

如何使用 Go 开发 CLI 应用程序

在使用 Go 开发 CLI 时,有两种工具被广泛使用:Cobra & Viper 。

Quotation mark.

我的任务是构建我们的 CLI 工具,并发现了两个非常棒的项目,Cobra 和 Viper ,它们让开发 CLI 更容易。就个人而言,他们非常强大,非常灵活,非常擅长做这些事情。并且他们都能帮助你展示你的下一个 CLI 应用程序。

Cobra 既是一个用来创建强大的现代的 CLI 应用程序的库,也是一个使用 Go 生成普通应用程序和 CLI 应用程序的程序。Cobra 支持大多数流行的 Go 应用程序,包括 CoreOS、Delve、Docker、Dropbox、Git LFS、Hugo、Kubernetes 以及 其他更多。有了集成的命令帮助、自动完成和文档化,“使每个命令的文档化变的非常简单,” Alex Ellis 说到,OpenFaaS 的创始人。

Quotation mark.

Cobra 是一个编写小型甚至大型工具的好产品。它更像是一个框架而不是一个库,因为当你调用库的时候会创建一个框架,然后在中间添加代码。”

Go gopher Viper 是一个完整的配置解决方案的 Go 应用程序。它是为了 App 中能方便处理格式化的配置需求而设计的。 Cobra 和 Viper 配合使用最佳。

Viper 支持配置文件中的嵌套结构,对于一个大型的应用程序,允许 CLI 开发者通过不同配置文件来管理。 Viper 还提供了构建 "12-Factor" 应用所需的所有工具。

“如果你不想污染你的命令行工具,或者你正在处理敏感数据,不希望在历史记录中显示这些数据,使用环境变量来控制是一个好方法。对此,你可以使用 Viper,” Geudens 建议

典型的解决方案

关于 CLI 的 Go 语言书籍