我正在用 CRD 编写一个k8s 运算符。该资源的状态字段的一部分是枚举值,使用 iota 如下:
type Enum int
const (
Enum1 = iota + 1
Enum2
Enum3
...
)
我有一个附加到枚举的函数,将其转换为字符串表示形式。当客户端将枚举编组到状态 yaml 时,我希望将该字符串表示形式用作值。
但是,当我实现时MarshalYAML
(就像我在这个操场上所做的那样:https: //play.golang.org/p/qtfFNoOQ-Dz),客户端 go 返回一个错误:
status.test.phase in body must be of type integer: "string"
(status.test.phase
是枚举的位置)
如果没有该函数,它会正确编组,而只是使用整数值。
gopkg.in/yaml.v2
在操场上(运行良好)和客户端 go 的编组系统之间有什么不同?