goyaml将字符串转换为int常量

时间:2016-11-18 20:41:40

标签: go yaml

假设我们有以下转码

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"的字符串?和"身体"进入各自的int常量类型(在sectionTypeNames map中定义)我们反序列化Page结构?

1 个答案:

答案 0 :(得分:2)

go-yaml无法自动执行此操作,因为它只能看到package reflect公开的类型,并且不包含包中常量的名称。从reflect的角度来看,并没有真正的包装概念。

听起来你愿意自己做(你已经做过map等)。所以我认为可以做的是做SectionType*[]SectionTypeUnmarshaler,提供一个函数来转换字符串YAML包解码为值;我缺乏go-yaml的具体经验,无法告诉您如何实现它,但总的来说,这就像Unmarshaler这样的接口。

如果这是你经常遇到的问题,那么可能需要按照stringer的方式编写一些内容来为你生成地图和反序列化函数(通过检查定义类型的源文件)。在此之前必须有很多类型。