gpt4 book ai didi

go - viper yaml 配置序列

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

我正在尝试使用 viper ( see viper docs ) 读取 yaml 配置文件。但是我看不到一种方法来读取问题类型下的 map 值序列。我尝试了各种 Get_ 方法但似乎没有人支持这一点。

remote:
host: http://localhost/
user: admin
password: changeit

mapping:
source-project-key: IT
remote-project-key: SCRUM

issue-types:
- source-type: Incident
remote-type: Task
- source-type: Service Request
remote-type: Task
- source-type: Change
remote-type: Story
- source-type: Problem
remote-type: Task

我希望能够遍历 map[strings] 的序列

最佳答案

如果您仔细查看可用的不同 Get 方法,您会发现返回类型为 string[]stringmap[string]interface{}map[string]stringmap[string][]string

但是,与“issue-types”关联的值的类型是[]map[string]string。因此,获取此数据的唯一方法是通过 Get 方法并使用类型断言。

现在,下面的代码生成了 issue_types 的适当类型,即 []map[string]string

issues_types := make([]map[string]string, 0)
var m map[string]string

issues_i := viper.Get("issue-types")
// issues_i is interface{}

issues_s := issues_i.([]interface{})
// issues_s is []interface{}

for _, issue := range issues_s {
// issue is an interface{}

issue_map := issue.(map[interface{}]interface{})
// issue_map is a map[interface{}]interface{}

m = make(map[string]string)
for k, v := range issue_map {
m[k.(string)] = v.(string)
}
issues_types = append(issues_types, m)
}

fmt.Println(reflect.TypeOf(issues_types))
# []map[string]string

fmt.Println(issues_types)
# [map[source-type:Incident remote-type:Task]
# map[source-type:Service Request remote-type:Task]
# map[source-type:Change remote-type:Story]
# map[source-type:Problem remote-type:Task]]

请注意,我没有做任何安全检查以使代码更小。但是,进行类型断言的正确方法是:

var i interface{} = "42"
str, ok := i.(string)
if !ok {
// A problem occurred, do something
}

关于go - viper yaml 配置序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37400832/

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