如何 go:generate 来自多个包的纵梁常量?
How to go:generate stringer constants from multiple packages?
我有一个这样的结构:
.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
不支持这个。引用其文档:
With no arguments, it processes the package in the current directory. Otherwise, the arguments must name a single directory holding a Go package or a set of Go source files that represent a single Go package.
最简单的解决方案是将所有枚举值放在同一个包中。您可以使用单独的文件,但它们必须在同一个包中。
如果你想/必须使用多个包,你只能用 stringer
如果你使用不同的类型,每个都在你列出常量的包中定义。
实际上可以在多个包上生成 Stringer 接口:更具体地说,在目录中包含的 所有 包上(递归)。只需使用
$ go generate ./...
这就像 go test ./...
一样,允许您递归执行目录中包含的所有测试。
我有一个这样的结构:
.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
不支持这个。引用其文档:
With no arguments, it processes the package in the current directory. Otherwise, the arguments must name a single directory holding a Go package or a set of Go source files that represent a single Go package.
最简单的解决方案是将所有枚举值放在同一个包中。您可以使用单独的文件,但它们必须在同一个包中。
如果你想/必须使用多个包,你只能用 stringer
如果你使用不同的类型,每个都在你列出常量的包中定义。
实际上可以在多个包上生成 Stringer 接口:更具体地说,在目录中包含的 所有 包上(递归)。只需使用
$ go generate ./...
这就像 go test ./...
一样,允许您递归执行目录中包含的所有测试。