go generate命令是在Go语言 1.4 版本里面新添加的一个命令,当运行该命令时,它将扫描与当前包相关的源代码文件,找出所有包含//go:generate的特殊注释,提取并执行该特殊注释后面的命令。go generate命令时有以下几点需要注意:go generate命令时,才会执行特殊注释后面的命令;go generate命令执行出错时,将终止程序的运行;//go:generate开头,双斜线后面没有空格。go generate命令:go generate命令格式如下所示:go generate [-run regexp] [-n] [-v] [-x] [command] [build flags] [file.go... | packages]
参数说明如下:go generate命令时,也可以使用一些环境变量,如下所示:$,不清楚具体用途。
package main
import "fmt"
//go:generate go run main.go
//go:generate go version
func main() {
fmt.Println("http://c.biancheng.net/golang/")
}
执行go generate -x命令,输出结果如下:
go generate -x
go run main.go
http://c.biancheng.net/golang/
go version
go version go1.13.6 windows/amd64
//go:generate之后的命令成功运行了,命令中使用的-x参数是为了将执行的具体命令同时打印出来。go generate命令的使用。go get golang.org/x/tools/cmd/stringer
上面的命令需要翻墙。条件不允许的话也可以通过 Github 上的镜像来安装,安装方法如下:
git clone https://github.com/golang/tools/ $GOPATH/src/golang.org/x/tools
go install golang.org/x/tools/cmd/stringer
//go:generate stringer -type=Pill
package painkiller
type Pill int
const (
Placebo Pill = iota
Aspirin
Ibuprofen
Paracetamol
Acetaminophen = Paracetamol
)
然后,在 painkiller.go 文件所在的目录下运行go generate命令。
// Code generated by "stringer -type=Pill"; DO NOT EDIT.
package painkiller
import "strconv"
func _() {
// An "invalid array index" compiler error signifies that the constant values have changed.
// Re-run the stringer command to generate them again.
var x [1]struct{}
_ = x[Placebo-0]
_ = x[Aspirin-1]
_ = x[Ibuprofen-2]
_ = x[Paracetamol-3]
}
const _Pill_name = "PlaceboAspirinIbuprofenParacetamol"
var _Pill_index = [...]uint8{0, 7, 14, 23, 34}
func (i Pill) String() string {
if i < 0 || i >= Pill(len(_Pill_index)-1) {
return "Pill(" + strconv.FormatInt(int64(i), 10) + ")"
}
return _Pill_name[_Pill_index[i]:_Pill_index[i+1]]
}
版权说明:Copyright © 广州松河信息科技有限公司 2005-2025 版权所有 粤ICP备16019765号
广州松河信息科技有限公司 版权所有