go generate
go generate是 Go 自带的工具。使用命令go generate执行。go generate是利用源代码中的注释工作的。格式如下:
//go:generate command arg1 arg2
这样在同一个目录下执行命令go generate就会自动运行命令command arg1 arg2。command可以是在PATH中的任何命令,应用非常广泛。官网提供了几种示例,见文档。
go generate命令
- -run 正则表达式匹配命令行,仅执行匹配的命令
- -v 输出被处理的包名和源文件名
- -n 显示不执行命令
- -x 显示并执行命令
$GOARCH 体系架构 (arm、amd64等待)
$GOOS OS环境(linux、windows等)
$GOFILE 当前处理中的文件名
$GOLINE 当前命令在文件中的行号
$GOPACKAGE 当前处理文件的包名
$DOLLAR 固定的”$”,不清楚用途
Stringer
stringer命令可以为给定类型生成String方法。
go get golang.org/x/tools/cmd/stringer
应用实例
- 定义错误码
常规做法:
package errCodetype ErrCode int// 定义错误码const (ERR_CODE_OK ErrCode = 0 // OKERR_CODE_INVALID_PARAMS = 1 // 无效参数ERR_CODE_TIMEOUT = 2 // 超时)func (e *ErrCode) String() string {switch *e {case ERR_CODE_OK:return "OK"case ERR_CODE_INVALID_PARAMS:return "无效参数"case ERR_CODE_TIMEOUT:return "超时"}return ""}=================== 调用 =====================func main() {code := errCode.ERR_CODE_INVALID_PARAMSfmt.Println(code)}输出:无效参数
使用go generate + stringer
//go:generate stringer -type ErrCode -linecomment -output code_string.gotype ErrCode int// 定义错误码const (ERR_CODE_OK ErrCode = 0 // OKERR_CODE_INVALID_PARAMS ErrCode = 1 // 无效参数ERR_CODE_TIMEOUT ErrCode = 2 // 超时)// 执行 go generate,将会生成code_string.go文件=================== 调用 =====================func main() {code := errCode.ERR_CODE_INVALID_PARAMSfmt.Println(code)}输出:无效参数
参数说明
选项-type 指定stringer命令作用的类型名
选项-output 指定输出文件名
选项-linecomment 使用注释,否则使用常量名,例如ERR_CODE_INVALID_PARAMS
