假设我们有下面的go代码
type SectionType int
const (
Header SectionType = iota
Footer
Body
)
var sectionTypeNames = map[string]SectionType{
"header": Header
"footer": Footer
"body": Body
}
type Page struct {
Sections: []SectionType `yaml:"sections"`
}我们有下面的yaml
page1:
- header
- body是否有一种方法可以让goyaml将"header“和"body”的字符串转换为各自的int常量类型(如sectionTypeNames映射中所定义的),我们将Page结构反序列化?
发布于 2016-11-18 20:59:32
go-yaml不能自动这样做,因为它只能看到package reflect公开的类型,而且不包括包中常量的名称。从reflect的角度来看,根本不存在包的概念。
听起来你似乎愿意自己动手(你已经做了一个map,等等)。因此,我认为您可以做的是让SectionType或*[]SectionType成为一个Unmarshaler,提供一个将YAML包解码的字符串转换为值的函数;我缺乏go-yaml的具体经验,无法准确地告诉您如何实现它,但一般来说,像Unmarshaler这样的接口就是这样的。
如果这是您经常遇到的事情,那么可能值得编写一些类似于stringer的东西来为您生成映射和反序列化函数(通过检查定义类型的源文件)。但是,在这之前,必须有很多类型。
https://stackoverflow.com/questions/40685601
复制相似问题