栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何在Golang中使用动态键解析YAML

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何在Golang中使用动态键解析YAML

首先,您尝试将根解析为

Environment
,但其实际类型为
map[string]Environment
。其次,
Unmarshaler
如果要保留该类型结构,则需要一个自定义项。像这样:

package mainimport (    "fmt"    "gopkg.in/yaml.v2")var data = `---development:  skip-header-validation: true  V1:    current: "1.0.0"    mime_types:      - application/vnd.company.jk.identity+json;      - application/vnd.company.jk.user+json;      - application/vnd.company.jk.role+json;      - application/vnd.company.jk.scope+json;      - application/vnd.company.jk.test+json;    skip-mime-type-validation: true    skip-version-validation: true  V2:    current: "2.0.0"    mime_types:      - application/vnd.company.jk.identity+json;      - application/vnd.company.jk.user+json;      - application/vnd.company.jk.role+json;      - application/vnd.company.jk.scope+json;      - application/vnd.company.jk.test+json;`type MajorVersion struct {    Current     string   `yaml:"current"`    MimeTypes   []string `yaml:"mime_types"`    SkipVersionValidation  bool     `yaml:"skip-version-validation"`    SkipMimeTypevalidation bool     `yaml:"skip-mime-type-validation"`}type Environment struct {    SkipHeaderValidation bool    Versions  map[string]MajorVersion}func (e *Environment) UnmarshalYAML(unmarshal func(interface{}) error) error {    var params struct {        SkipHeaderValidation bool `yaml:"skip-header-validation"`    }    if err := unmarshal(&params); err != nil {        return err    }    var versions map[string]MajorVersion    if err := unmarshal(&versions); err != nil {        // Here we expect an error because a boolean cannot be converted to a        // a MajorVersion        if _, ok := err.(*yaml.TypeError); !ok { return err        }    }    e.SkipHeaderValidation = params.SkipHeaderValidation    e.Versions = versions    return nil}func main() {    var e map[string]Environment    if err := yaml.Unmarshal([]byte(data), &e); err != nil {        fmt.Println(err.Error())    }    fmt.Printf("%#vn", e)}

输出(使用化妆后):

map[string]main.Environment{    "development": {        SkipHeaderValidation: true,        Versions:  { "V2": {     Current:     "2.0.0",     MimeTypes:   {"application/vnd.company.jk.identity+json;", "application/vnd.company.jk.user+json;", "application/vnd.company.jk.role+json;", "application/vnd.company.jk.scope+json;", "application/vnd.company.jk.test+json;"},     SkipVersionValidation:  false,     SkipMimeTypevalidation: false, }, "V1": {     Current:     "1.0.0",     MimeTypes:   {"application/vnd.company.jk.identity+json;", "application/vnd.company.jk.user+json;", "application/vnd.company.jk.role+json;", "application/vnd.company.jk.scope+json;", "application/vnd.company.jk.test+json;"},     SkipVersionValidation:  true,     SkipMimeTypevalidation: true, },        },    },}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/448046.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号