本文给大家介绍Go的一个实用技巧,该技巧主要通过go工具实现。
传统写法
大家经常碰到命名错误码、状态码的同时,又要同步写码对应的翻译,有没有感觉很无聊。这里举一个例子:
1 | package main |
这是一种重复性操作,没有什么技术含量,另外很可能忘记写映射。我只想写错误码,对应的描述信息直接用注释里的就行,所以这里介绍一下对应的工具。
go generate
go有很多工具,大家可以通过go命令查看。
go generate
是 Go 自带的工具。使用命令go generate
执行。go generate
是利用源代码中的注释工作的。格式如下:
1 | //go:generate command arg1 arg2 |
这样在同一个目录下执行命令go generate
就会自动运行命令command arg1 arg2
。command
可以是在PATH
中的任何命令,应用非常广泛。配合stringer
命令可以为给定类型生成String
方法,就可以实现我们的想法。
安装stringer
stringer不是Go自带工具,需要手动安装。执行如下命令即可
1 | go get golang.org/x/tools/cmd/stringer |
注意点
- 需要配置gomod
- 需要设置好目录,当前目录结构如下
使用
有两种执行方案,
一种是在errcode中,增加注释//go:generate stringer -type ErrCode -linecomment
另一种是直接命令行执行stringer -type ErrCode -linecomment
执行完毕会发现自动生成新文件
关于stringer的命令,大家可以通过stringer -h查看
源码
下面是整个源码:
main.go
1 | package main |
errcode.go
1 | package enum |
stringer生成的文件
1 | // Code generated by "stringer -type ErrCode -linecomment"; DO NOT EDIT. |
执行结果显示如下:
➜ myproject go run main.go
OK
总结
使用stringer可以帮我们节省很多时间,除了stringer外,还有gostringer,大家感兴趣可以试一下。
资源
- https://pkg.go.dev/golang.org/x/tools#readme-go-tools
- https://studygolang.com/articles/22984?fr=sidebar
- https://blog.csdn.net/weixin_39345003/article/details/109307880
- https://blog.golang.org/generate
- https://docs.google.com/document/d/1V03LUfjSADDooDMhe-_K59EgpTEm3V8uvQRuNMAEnjg/edit#heading=h.j6dsjy94dn2q
- https://blog.csdn.net/qq_31362439/article/details/105163641
- https://pkg.go.dev/github.com/sourcegraph/gostringer