从terraform模式访问Golang中的排版并在地图上迭代
我正试图通过terraform配置文件访问Golang中具有以下模式的关键元素:从terraform模式访问Golang中的排版并在地图上迭代,go,terraform,Go,Terraform,我正试图通过terraform配置文件访问Golang中具有以下模式的关键元素: "vehicles": { Type: schema.TypeSet, Optional: true, MaxItems: 5, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "car": { Type: schema
"vehicles": {
Type: schema.TypeSet,
Optional: true,
MaxItems: 5,
Elem: &schema.Resource{
Schema: map[string]*schema.Schema{
"car": {
Type: schema.TypeList,
Optional: true,
MaxItems: 2,
Elem: &schema.Resource{
Schema: map[string]*schema.Schema{
"make": {
Type: schema.TypeString,
Optional: true,
},
"model": {
Type: schema.TypeString,
Optional: true,
},
},
},
},
},
},
}
在配置文件中
resource "type_test" "type_name" {
vehicles {
car {
make = "Toyota"
model = "Camry"
}
car {
make = "Nissan"
model = "Rogue"
}
}
}
我想迭代列表,并通过Golang访问车辆地图
地形崩溃,代码如下:
vehicles_map, ok = d.getOK("vehicles")
if ok {
vehicleSet := vehicles_d.(*schema.Set)List()
for i, vehicle := range vehicleSet {
mdi, ok = vehicle.(map[string]interface{})
if ok {
log.Printf("%v", mdi["vehicles"].(map[string]interface{})["car"])
}
}
事故日志:
2019-12-25T21 [DEBUG] plugin.terraform-provider: panic: interface conversion: interface {} is nil, not map[string]interface {}
对于第行“log.Printf(“%v”,mdi[“vehicles”]。(映射[字符串]接口{})[“car”])”
我想打印并访问配置文件中的每个vehicles元素,如有任何帮助,将不胜感激。d.getOK(“vehicles”)
已使用“vehicles”
键执行索引,这将导致。调用它的方法,您将得到一个切片(类型为[]接口{}
)。对其元素进行迭代将得到表示car
的值,该值使用类型map[string]接口{}
建模。因此,在循环内部,您只需将assert键入此类型,而不必使用“vehicles”
或“car”
再次索引
大概是这样的:
for i, vehicle := range vehicleSet {
car, ok := vehicle.(map[string]interface{})
if ok {
log.Printf("model: %v, make: %v\n", car["model"], car["make"])
}
}
然后,
mdi
没有钥匙“vehicles”
。@icza是的,你是对的,当我打印时,我得到以下信息:map[car:[map[model:Toyota make:Camry]map[model:Nissan make:Rogue]],你知道如何迭代和打印每个内部元素吗?@KaranKotabagi你能发布你的精确输出吗?我试图在内部for循环中打印一个值,如car[“model”],只需在终端中为这个特定日志获取输出为“”。@KaranKotabagi你能像这样打印:fmt.Printf(“%T%v”,车辆,车辆)