我正在检索一个名为DockerInfo
的对象,其中有一个名为SystemStatus
的字段[][2]string
,然后为了访问SystemStatus
中的元素我正在做这个,例如,如果SystemStatus
中的第4个元素是["Nodes","6"]
,那么访问数字6
dockerinfo.SystemStatus[3][1]
但是Nodes
元素并没有固定在第4位,所以我不能使用索引,而是想通过例如写作找到节点数
dockerinfo.SystemStatus["Nodes"]
我该怎么做?或者如何将SystemStatus
转换为map[string]string
格式?
答案 0 :(得分:0)
使用简单的for
循环迭代dockerinfo.SystemStatus
切片的值,并将第一个值与"Nodes"
进行比较:
for _, v := range dockerinfo.SystemStatus {
if v[0] == "Nodes" {
// Got it!
value := v[1] // This will be "6" in your example
fmt.Println("Nodes value:", value)
break
}
}
此value
的类型为string
,但它看起来包含数字数据。如果您希望将其作为int
,则可以使用strconv.Atoi()
来解析该数字:
value := v[1]
if n, err := strconv.Atoi(value); err == nil {
// n is of type int, use it like so
} else {
// Not a number!
}
如果必须多次查找值,从中构建地图可能会有利可图。这就是你如何做到的:
ssmap := map[string]string{}
for _, v := range dockerinfo.SystemStatus {
ssmap[v[0]] = v[1]
}
// And then you can do simple lookup:
if nodes, ok := ssmap["Nodes"]; ok {
fmt.Println("Nodes value:", nodes)
} else {
// Nodes not found!
}