我有这样的结构:
.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
)如何从所有包中生成具有值的字符串?
发布于 2019-04-01 12:03:42
golang.org/x/tools/cmd/stringer不支持这一点。引用其医生的话:
在没有参数的情况下,它处理当前目录中的包。否则,参数必须指定一个包含Go包的目录或一组表示单个Go包的Go源文件。
最简单的解决方案是将所有枚举值放在同一个包中。您可以使用不同的文件,但它们必须在同一个包中。
如果需要/必须使用多个包,则只有在使用不同类型时才能使用stringer,每个类型都定义在列出常量的包中。
发布于 2021-01-27 18:02:57
实际上,在多个包上生成Stringer接口是可能的:更具体地说,在上,包含在目录中的所有包(递归)。只管用
$ go generate ./...这就像go test ./...一样,它允许递归地执行目录中包含的所有测试。
https://stackoverflow.com/questions/55451280
复制相似问题