构造深层结构不起作用

问题描述 投票:-1回答:1

我有一个负责从yaml文件解析数据的struct虽然这个结构有时我有一些我需要解析的新字段

这很有效

  - name: test1
    type: type
    path: path

这不是

 - name: test1
    type: type
    path: path
    build-parameters:
       maven-opts:
          defines:
              skipTests: true

这是结构

type Modules struct {
    Name string
    Type string
    Path string
    Parameters Parameters `yaml:"build-parameters,omitempty"`
}

参数类型为:

type Parameters map[string]string

我应该如何构造我的结构来接受这个构建参数条目呢?

这是我使用的库

https://github.com/go-yaml/yaml

dictionary go struct hashmap yaml
1个回答
0
投票

您的结构与数据结构不匹配。如果Parametersmap[string]string,它接受键值对,其中键和值都是string。在您的数据中,build-parameters包含一个对象,该对象包含一个对象,该对象包含一个键值对。

您可以将Parameters重新定义为map[string]interface{}并使用类型断言,或者您可以定义整个结构,例如:

type Parameters struct {
    MavenOpts struct {
        Defines map[string]string
    } `yaml:"maven-opts"`
}

如果使用空接口,则必须使用类型断言,这会非常麻烦。例如:

if opts, ok := module.Parameters["maven-opts"].(map[string]interface{}); ok {
    if defines,ok := opts["defines"].(map[string]interface{}); ok {
        if skipTests,ok := defines["skipTests"].(bool); ok {
            // skipTests is the bool value from the yaml
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.