如何去:从多个包生成字符串常量



我有一个这样的结构:

.foo/bar/constants.go
.foo/constants.go
.main.go 

main.go中,我声明了以下类型:

package agepack
type EventType uint
//go:generate stringer -type EventType
const (
    FirstType EventType iota
    SecondType
    ....
)

在每constants.go我都有这样的安慰:

package foo
const (
   OneMoreType agepack.EventType = 100 + iota
)

如何使用所有包中的值生成纵梁?

golang.org/x/tools/cmd/stringer不支持这一点。引用其文档:

如果没有参数,它将处理当前目录中的包。否则,参数必须命名一个包含 Go 包的目录或一组表示单个 Go 包的 Go 源文件。

最简单的解决方案是将所有枚举值放在同一个包中。您可以使用单独的文件,但它们必须位于同一包中。

如果要/必须使用多个包,则只能在使用不同的类型时使用stringer执行此操作,每个类型都在列出常量的包中定义。

事实上,可以在多个包上生成 Stringer 接口:更具体地说,在一个目录中包含的所有包上(递归(。只需使用

$ go generate ./...

这就像go test ./...允许您递归执行目录中包含的所有测试一样。

最新更新