Go 解组YAML返回不完整的结果

Go 解组YAML返回不完整的结果,go,yaml,Go,Yaml,输入Yaml: params: - aws.region: ["us-west-1","us-west-2"] - aws.s3path: ["s3-path-1", "s3-path-2"] 代码: package main import ( "fmt" "io/ioutil" "os" "gopkg.in/yaml.v2" ) func main() { var f File wfyaml, _ := os.Open("t

输入Yaml:

params: 
  - aws.region: ["us-west-1","us-west-2"]
  - aws.s3path: ["s3-path-1", "s3-path-2"]
代码:

package main

import (
    "fmt"
    "io/ioutil"
    "os"

    "gopkg.in/yaml.v2"
)

func main() {  
    var f File
    wfyaml, _ := os.Open("temp.yaml")
    byteValue, _ := ioutil.ReadAll(wfyaml)
    yaml.Unmarshal(byteValue, &f)
    fmt.Print(f)
}

type File struct {
    Params Params `yaml:"params"`
}

type Params []struct { // <<< This [] behavior is confusing
    AwsRegion []string `yaml:"aws.region"`
    S3path    []string `yaml:"aws.s3path"`
}
如果我使用

type Params struct { // <<< This [] behavior is confusing
        AwsRegion []string `yaml:"aws.region"`
        S3path    []string `yaml:"aws.s3path"`
    }

type Params struct{//这是因为输入yaml中的
Params
是一个数组

如果您将输入yaml更改为以下值,那么您将发现
类型为Params struct
的代码按照预期工作,因为在这种情况下
Params
不再是数组

params:
    aws.region: ["us-west-1","us-west-2"]
    aws.s3path: ["s3-path-1", "s3-path-2"]

该行为与YAML输入一致:

params: 
  - aws.region: ["us-west-1","us-west-2"]
  - aws.s3path: ["s3-path-1", "s3-path-2"]

上面,
params
是一个数组,因为它的元素以一个
-
开头。每个
-
都是一个数组元素,并且因为每个元素都有一个键,
param
是一个对象数组。第一个元素是一个具有键
aws.region
的对象,第二个元素是一个具有键
aws.s3path
的对象se对象本身就是字符串数组。

您试图实现什么输出?YAML输入是否严格,即您不能更改其格式?或者您希望项目切片列表位于单个结构中,而不是一个结构切片中?
params: 
  - aws.region: ["us-west-1","us-west-2"]
  - aws.s3path: ["s3-path-1", "s3-path-2"]