前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >创建一个杀手级 Go Cli 的 5 个关键点

创建一个杀手级 Go Cli 的 5 个关键点

作者头像
李海彬
发布2018-07-26 09:33:57
9570
发布2018-07-26 09:33:57
举报

本文翻译自 https://blog.alexellis.io/5-keys-to-a-killer-go-cli/。 本文的作者是 OpenFaaS 的作者,原文中作者结合了自身开发 OpenFaaS 经历说明的 CLI 应该需要的注意事项,翻译过程中为了方便理解很多已经略去,但是不妨碍整体理解作者表达使用 Go 创建优秀 CLI 的意图以及方法。

CLI(命令行接口)是一种文本接口,其提供了一种快速、自动化的方式与应用程序打交道,并且还可以和其他命令行程序接口创建新的工作流。

选择 Go 创建 CLI

选择 Go 创建 CLI 的优势 Compiles to a single static binary — 能够编译成单独的二进制包 Go 可以非常方便的根据平台打包成二进制包发布,根据平台的不同,只需要在编译的时候提供不同的环境变量即可:

1GOOS=windows go build -o cli.exe 
2GOOS=linux go build -o cli 
3GOARCH=armv7 GOOS=linux go build -o cli-rpi

Consistent style — 一致的风格 无论你的项目是基于何种编辑器,Go 总是提供一致的代码风格,这点和 Nodejs 不同,后者总是包含很多种不同的 “task runners” 让人眼花缭乱。 Go 在风格保持方面的设计可以说非常不含糊,这样的设计有利于开发者进行协作。 Fast on every platform — 在任何平台都很快 编译后 Go 二进制包加载非常快相比 Nodejs 来说。 Easy to create a REST client — 创建 REST 风格的 client 非常容易 Go 提供了非常丰富的 http client,并且内置了对 xml、json 的支持,社区的第三方库也提供了对 YAML 的支持

Parse flags & argumentsGo

标准库提供了 flags 包来创建 CLI 应用程序:

 1package main
 2import (
 3    "flag"
 4    "fmt"
 5    "os"
 6)
 7func main() {
 8    var image string
 9    flag.StringVar(&image, "image", "", "Docker image")
10    flag.Parse()
11    if len(image) == 0 {
12        fmt.Fprintf(os.Stderr, "You must specify a Docker image name")
13    }
14    fmt.Printf("Your Docker image was: %s", image)
15}
Go 的简单朴可以让你仅仅使用一个文件就能够编译成要执行的二进制包。

如果你觉得 flags 包提供的特性已经无法满足你的 CLI ,你可以考虑使用 Cobra 。 Cobra 被 Docker、Kubernetes 等知名开源软件使用,Cobra 也可以让创建 CLI 的文档变得非常简单。除此之外,Cobra 支持动词名词的语法,这有助于提升 CLI 的用户体验:

1 faas-cli -deploy -image=functions/alpine -name=cat -fprocess=/bin/cat

To:

1 faas-cli deploy --image=functions/alpine --name=cat --fprocess=/bin/cat

自动化一切

使用一个免费公开的 CI 平台来自动化 build 工作,比如 Travis,这样可以让 contributors 检测他们的贡献是否可以被集成。

使用 Github release 来跟踪项目的变化和里程碑,可以在 Travis 中创建一个 post-build action 来自动打包发布各个平台的应用。

如果你使用 Docker ,每当要发布新的 release 同时也发布对应的 Docker 镜像。

集成包管理器

如果你想要你的受众非常容易使用你的 CLI,最好让你的 CLI 支持使用包管理器安装:

  • Mac 大多数开发者的环境都是 Mac,所以提供 brew 的支持是个明智的选择
  • Linux 对于 Linux 可以提供命令行安装和使用的方案,比如 curl -sL https://cli.openfaas.com | sh
  • Windows 大多数 Windows 用户倾向于使用安装的方式,Windows 平台的好用的 shell 工具在不断增多,也可以考虑提供一种 shell 的安装方式

无论是支持哪个平台的包管理,优先确保你的工作是可自动化的,而且升级能够平滑进行。

接受社区的贡献和收集反馈

为用户提供一种非常方便的反馈方式。基础的反馈和统计可以通过 Github 或者 brew 来完成。有些关键性的项目是可以通过第三方工具收集反馈,比如通过 brew、Visual Studio Code 等:

  • 哪个命令被使用
  • OS、CLI version、location 等等

2018年5月24日社区内部分享,晚上21:00 ,Go协程调度讲解 YY频道:15288615 时 间:2018年5月24日 晚上21:00

版权申明:内容来源网络,版权归原创者所有。除非无法确认,我们都会标明作者及出处,如有侵权烦请告知,我们会立即删除并表示歉意。谢谢。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-05-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Golang语言社区 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档