命令行界面 (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 为命令行工具,使其更容易使用 GitHub,包装 git 以扩展其功能和命令。
Hugo Hugo Hugo Hugo 是最流行的 Go CLI 应用程序之一,为包括本网站在内的数千个网站提供支持。它受欢迎的一个原因是它易于安装,这要归功于 Go。Hugo 作者 Bjørn Erik Pedersen 写道:“单个二进制文件消除了安装和升级的大部分麻烦。”

开始使用

用于创建 CLI 的 Go 书籍

  • spf13/cobra

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

  • spf13/viper

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

  • urfave/cli

    用于创建和组织命令行 Go 应用程序的最小框架

  • delve

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

  • chzyer/readline

    提供 GNU Readline(在 MIT 许可证下)中大多数功能的纯 Golang 实现

  • dixonwille/wmenu

    CLI 应用程序中易于使用的菜单结构,提示用户做出选择

  • spf13/pflag

    Go 的 flag 包的替代品,实现 POSIX/GNU 样式标志

  • golang/glog

    Go 的分级执行日志

  • go-prompt

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

查看更多