gpt4 book ai didi

go - 如何遍历 Golang 中的所有 YAML 值?

转载 作者:数据小太阳 更新时间:2023-10-29 03:15:23 27 4
gpt4 key购买 nike

我想了解 Golang 中的嵌套映射。我有一个如下所示的 map ,如何遍历所有键?

Data:
- name: "foo"
bar1: 0
k1: val1
k2:
val2
val3
bar2: 1
k3: val4
k4: val5
k3: val4
k4: val5

最佳答案

您必须将数据解码到 map (map[interface{}]interface{}map[string]interface{}) 然后您必须检查键值的类型。您可以使用 yaml.v2 包,并且可能有更清晰的界面有助于检测值的类型。否则检查迭代键并打印值的示例:

package main

import (
"fmt"
"gopkg.in/yaml.v2"
"reflect"
"strings"
)

var data = `
Data:
- name: "foo"
bar1: 0
k1: val1
k2:
val2
val3
bar2: 1
k3: val4
k4: val5
k5: val5
k6: val6
`

func printVal(v interface{}, depth int) {
typ := reflect.TypeOf(v).Kind()
if typ == reflect.Int || typ == reflect.String {
fmt.Printf("%s%v\n", strings.Repeat(" ", depth), v)
} else if typ == reflect.Slice {
fmt.Printf("\n")
printSlice(v.([]interface{}), depth+1)
} else if typ == reflect.Map {
fmt.Printf("\n")
printMap(v.(map[interface{}]interface{}), depth+1)
}

}

func printMap(m map[interface{}]interface{}, depth int) {
for k, v := range m {
fmt.Printf("%sKey:%s", strings.Repeat(" ", depth), k.(string))
printVal(v, depth+1)
}
}

func printSlice(slc []interface{}, depth int) {
for _, v := range slc {
printVal(v, depth+1)
}
}

func main() {
m := make(map[string]interface{})

err := yaml.Unmarshal([]byte(data), &m)
if err != nil {
panic(err)
}
for k, v := range m {
fmt.Printf("Key:%s ", k)
printVal(v, 1)
}
}

关于go - 如何遍历 Golang 中的所有 YAML 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36765842/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com