douya5194 2016-11-18 20:41
浏览 188
已采纳

goyaml将字符串转换为int常量

Suppose we have the following go code

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"`
}

And we have the following yaml

page1:
  - header
  - body

Is there a way to get goyaml to convert the strings of "header" and "body" into their respective int constant types (as defined in sectionTypeNames map) we deserializing the Page struct?

  • 写回答

1条回答 默认 最新

  • duanji5746 2016-11-18 20:59
    关注

    go-yaml can't do it automatically because it can only see what package reflect exposes about types, and that doesn't include the names of constants in a package. There isn't really a notion of packages from reflect's perspective at all.

    It sounds like you're willing to do it yourself (you've already made a map, etc). So I think what you can do is make SectionType or *[]SectionType an Unmarshaler, by providing a function that turns the strings the YAML package decodes into values; I lack the specific experience with go-yaml to be able to tell you exactly how to implement it, but in general that's what interfaces like Unmarshaler do.

    If this is something you run into often enough, it might be worthwhile writing something along the lines of stringer to generate the maps and deserialization functions for you (by inspecting the source files that define the types). There have to be a lot of types before that's worthwhile though.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 做个有关计算的小程序
  • ¥15 MPI读取tif文件无法正常给各进程分配路径
  • ¥15 如何用MATLAB实现以下三个公式(有相互嵌套)
  • ¥30 关于#算法#的问题:运用EViews第九版本进行一系列计量经济学的时间数列数据回归分析预测问题 求各位帮我解答一下
  • ¥15 setInterval 页面闪烁,怎么解决
  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥20 对于工程问题的非线性数学模型进行线性化