英文:
golang access values from map inside a map
问题
我正在使用Avi Go SDK来获取 Avi 健康监控配置,代码如下所示:
var healthmonitormap map[string]interface{}
err = aviClient.AviSession.GetObjectByName("healthmonitor", "healthmonitorname", &healthmonitormap)
if err != nil {
t.Error(err)
}
这段代码将健康监控的元数据存储在 healthmonitormap
中,它是一个类似下面的映射:
map[
_last_modified:1644392621383838
failed_checks:3
https_monitor:map[
http_request:GET /welcome HTTP/1.1
http_response_code:[HTTP_2XX HTTP_3XX]]
monitor_port:443
name:helloworldspringbootssl-dit1-monitor
receive_timeout:3
send_interval:10
successful_checks:3
tenant_ref:https://xxxxxxxxxxxxxxxx/api/tenant/tenant-xxxxxxxxxxxx
type:HEALTH_MONITOR_HTTPS
url:https://xxxxxxxxxxx/api/healthmonitor/healthmonitor-xxxxxxxxxxxxxxx
uuid:healthmonitor-xxxxxxxxxxxxxxxx]
从这个映射中,我能够成功访问 name
、monitor_port
等根级别的属性,代码如下:
assert.Equal(t, healthmonitormap["name"], "helloworldspringbootssl-dit1-monitor")
assert.Equal(t, float64(443), healthmonitormap["monitor_port"])
然而,我不知道如何访问 http_request
和 http_response_code
这样的嵌套映射。它们是映射中的映射。
如果有任何帮助,将不胜感激。
英文:
I am leveraging Avi Go SDK to fetch avi healthmonitor configuration as below
var healthmonitormap map[string]interface{}
err = aviClient.AviSession.GetObjectByName("healthmonitor", "healthmonitorname", &healthmonitormap)
if err != nil {
t.Error(err)
}
Which store the metadata of health monitor in healthmonitormap as a map like below
map[
_last_modified:1644392621383838
failed_checks:3
https_monitor:map[
http_request:GET /welcome HTTP/1.1
http_response_code:[HTTP_2XX HTTP_3XX]]
monitor_port:443
name:helloworldspringbootssl-dit1-monitor
receive_timeout:3
send_interval:10
successful_checks:3
tenant_ref:https://xxxxxxxxxxxxxxxx/api/tenant/tenant-xxxxxxxxxxxx
type:HEALTH_MONITOR_HTTPS
url:https://xxxxxxxxxxx/api/healthmonitor/healthmonitor-xxxxxxxxxxxxxxx
uuid:healthmonitor-xxxxxxxxxxxxxxxx]
From the map, I am able to successfully access name, monitor_port etc. Which are in the root of map as below
assert.Equal(t, healthmonitormap["name"], "helloworldspringbootssl-dit1-monitor")
assert.Equal(t, float64(443), healthmonitormap["monitor_port"])
However I am not able to understand how to access the things like http_request and http_response_code which are map inside a map.
Any assistance is appreciated.
答案1
得分: 2
由于地图的元素是interface{}
,您需要将其转换为相应的类型,以便将其作为地图访问,就像这样:
if value, ok := healthmonitormap["https_monitor"].(map[string]interface{}); ok {
fmt.Println(value["http_request"]) //输出:GET /welcome HTTP/1.1
}
这段代码将healthmonitormap["https_monitor"]
转换为map[string]interface{}
类型,并检查转换是否成功。如果成功,它将访问value["http_request"]
并打印输出结果。
英文:
Since the elem of the map is an interface{}
you have to convert it to the corresponding type to access it as a map, like this:
if value, ok := healthmonitormap["https_monitor"].(map[string]interface{}); ok {
fmt.Println(value["http_request"]) //Output: GET /welcome HTTP/1.1
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论