GoYAML-将字符串输入转换为Unmarshal上的类型

时间:2019-06-14 00:58:08

标签: go

我为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”友好的方式来做到这一点?

1 个答案:

答案 0 :(得分: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()