【问题标题】:GoYAML - Convert string input to type on UnmarshalGoYAML - 将字符串输入转换为 Unmarshal 上的类型
【发布时间】:2019-06-14 00:58:08
【问题描述】:

我为我的 Yaml 文件定义了一个结构,如下所示:

type Service struct {
    ServiceName  string       `yaml:"service_name"`
    PipelineType PipelineType `yaml:"pipeline_type"`
}

在文件中,这个结构体以字符串的形式出现:

    service_name: service
    pipeline_type: app

我的类型是这样定义的:

// PipelineType Pipeline Types
type PipelineType struct {
    Value string
}

var (
    AppPipeline           = PipelineType{"app"}
    ...
)

由于类型声明,我收到以下错误(预期):

line 4: cannot unmarshal !!str `app` into main.PipelineType

有没有办法告诉 GoYAML,或者创建某种形式的构造函数来使用 string(PipelineType) 或类似的东西转换值?

或者,是否有“GoYAML”友好的方式来做到这一点?

【问题讨论】:

    标签: go


    【解决方案1】:

    试试这个:

    type Service struct {
        ServiceName  string       `yaml:"service_name"`
        PipelineType PipelineType `yaml:"pipeline_type"`
    }
    
    func (s *Service) myYml() *Service {
    
        yamlFile, err := ioutil.ReadFile("service.yaml")
        if err != nil {
            log.Println(err.Error())
        } 
        err = yaml.Unmarshal(yamlFile, s)
        if err != nil {
            log.Println(err.Error())
        }
    
        return s
    }
    

    得到它:

    var s Service
    s.myYml()
    

    【讨论】:

    • 抱歉,如果文件只包含这些值,这将起作用。问题出在这个阶段,我已经用这些内容解组了更大的文件。我还在寻找选项,谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-06
    相关资源
    最近更新 更多