如何进行:从多个包中生成字符串常量?

时间:2019-04-01 08:53:04

标签: go generate

我有一个像这样的结构:

.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
)

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

2 个答案:

答案 0 :(得分:0)

golang.org/x/tools/cmd/stringer不支持此功能。引用其文档:

  

不带任何参数,它将处理当前目录中的包。否则,参数必须命名一个包含Go包的目录或一组代表单个Go包的Go源文件。

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

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

答案 1 :(得分:0)

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

$ go generate ./...

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