Go开发命令行程序指南( 七 )

  • 使用go工具cover命令来生成代码覆盖率的HTML报告,并高亮显示代码行 。你也可以使用-func这样的标志来显示函数的代码覆盖率,用-html还可以在浏览器中打开覆盖率结果报告等等 。例如:go tool cover -html=coverage.out
  • 编写性能基准函数,以Benchmark开头,后面是被测试的函数或方法的名称 。使用类型为*testing.B的参数b来控制迭代次数,并使用b.N、b.ReportAllocs等方法控制报告结果的输出 。比如说
  • func BenchmarkSum(b *testing.B) {for i := 0; i < b.N; i++ {Sum(1 , 2)}}
    • 使用go test -bench命令来运行一个包中的所有性能基准测试或某个特定的基准文件 。你也可以使用-benchmem这样的标志来显示内存分配的统计数据,-cpuprofile或-memprofile来生成CPU或内存profile文件等等 。例如:go test -bench . -benchmem ./...
    • 使用pprof或benchstat等工具来分析和比较CPU或内存profile文件或基准测试结果 。比如说 。
    # Generate CPU profilego test -cpuprofile cpu.out ./...# Analyze CPU profile using pprofgo tool pprof cpu.out# Generate two sets of benchmark resultsgo test -bench . ./... > old.txtgo test -bench . ./... > new.txt# Compare benchmark results using benchstatbenchstat old.txt new.txt3. 使用goreleaser包构建跨平台的二进制文件构建跨平台二进制文件意味着将你的代码编译成可执行文件,可以在不同的操作系统和架构上运行,如Windows、Linux、Mac OS、ARM等 。这可以帮助你向更多的人分发你的程序,使用户更容易安装和运行你的程序而不需要任何依赖或配置 。
    为了给你的Go CLI程序建立跨平台的二进制文件,你可以使用外部软件包,比如goreleaser等,它们可以自动完成程序的构建、打包和发布过程 。下面是使用goreleaser包构建程序的一些步骤 。
    • 使用go get或go install命令安装goreleaser 。例如: go install github.com/goreleaser/goreleaser@latest
    • 创建一个配置文件(通常是.goreleaser.yml),指定如何构建和打包你的程序 。你可以定制各种选项,如二进制名称、版本、主文件、输出格式、目标平台、压缩、校验和、签名等 。例如 。
    # .goreleaser.ymlproject_name: myclibuilds:- main: ./cmd/mycli/main.gobinary: mycligoos:- windows- darwin- linuxgoarch:- amd64- arm64archives:- format: zipname_template: "{{ .ProjectName }}_{{ .Version }}_{{ .Os }}_{{ .Arch }}"files:- LICENSE.txt- README.mdchecksum:name_template: "{{ .ProjectName }}_checksums.txt"algorithm: sha256运行goreleaser命令,根据配置文件构建和打包你的程序 。你也可以使用-snapshot用于测试,-release-notes用于从提交信息中生成发布说明,-rm-dist用于删除之前的构建,等等 。例如:goreleaser --snapshot --rm-dist 。
    检查输出文件夹(通常是dist)中生成的二进制文件和其他文件 。你也可以使用goreleaser的发布功能将它们上传到源代码库或软件包管理器中 。
    七. clig.dev指南要点通过上述的系统说明,你现在应该可以设计并使用Go实现出一个CLI程序了 。不过本文并非覆盖了clig.dev指南的所有要点,因此,在结束本文之前,我们再来回顾一下clig.dev指南中的要点,大家再体会一下 。
    前面说过,clig.dev上的cli指南是一个开源指南,可以帮助你写出更好的命令行程序,它采用了传统的UNIX原则,并针对现代的情况进行了更新 。
    遵循cli准则的一些好处是:
    • 你可以创建易于使用、理解和记忆的CLI程序 。
    • 你可以设计出能与其他程序进行很好配合的CLI程序,并遵循共同的惯例 。
    • 你可以避免让用户和开发者感到沮丧的常见陷阱和错误 。
    • 你可以从其他CLI设计者和用户的经验和智慧中学习 。
    下面是该指南的一些要点:
    • 理念
    这一部分解释了好的CLI设计背后的核心原则,如人本设计、可组合性、可发现性、对话性等 。例如,以人为本的设计意味着CLI程序对人类来说应该易于使用和理解,而不仅仅是机器 。可组合性意味着CLI程序应该通过遵循共同的惯例和标准与其他程序很好地协作 。
    • 参数和标志
    这一部分讲述了如何在你的CLI程序中使用位置参数(positional arguments )和标志 。它还解释了如何处理默认值、必传参数、布尔标志、多值等 。例如,你应该对命令的主要对象或动作使用位置参数,对修改或可选参数使用标志 。你还应该使用长短两种形式的标志(如-v或-verbose),并遵循常见的命名模式(如--help或--version) 。


    推荐阅读