Go 解组YAML返回不完整的结果
输入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
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"]