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.txt
3. 使用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设计者和用户的经验和智慧中学习 。
- 理念
- 参数和标志
推荐阅读
- 可以让你零代码快速开发REST API的几个开源项目
- HTTP缓存如何提高Web应用程序的性能?
- 搭建私有云平台,无需开发,一键部署,让你省事又省心。懂视生活
- APP开发用什么语言好?Java和PHP的区别在哪?
- GPT-4解放程序员!GitHub推出Copilot X,动动嘴就能写代码
- iOS使用FFmpeg命令行
- 从零开发一套基于React的加载动画库
- 短视频开发,如何正确的使用前后端分离?
- 2023年优秀编程语言趋势
- 程序员|作为一个程序员为什么今年的工作感觉更难找了呢