1 回答

TA貢獻(xiàn)1898條經(jīng)驗(yàn) 獲得超8個(gè)贊
在 Terraform 提供程序中使用ResourceData
API 時(shí),了解每種模式類型對(duì)應(yīng)的 Go 類型會(huì)很有幫助。您已經(jīng)推斷出schema.TypeString
對(duì)應(yīng)于string
. 這是一個(gè)完整的列表:
TypeBool
?bool
TypeString
?string
TypeInt
?int
TypeList
?[]interface{}
TypeMap
?map[string]interface{}
TypeSet
?*schema.Set
Elem
設(shè)置為 a時(shí)的元素類型*schema.Resource
:map[string]interface{}
上面的翻譯記錄在 SDK 的模式類型文檔頁面上,在每個(gè)標(biāo)題下作為“數(shù)據(jù)結(jié)構(gòu):”。
每當(dāng)您處理集合時(shí),從 Go 的角度來看,元素類型始終interface{}
反映了元素類型直到運(yùn)行時(shí)才確定的事實(shí)。TypeList
但是,上面定義的相同映射規(guī)則也適用于這些元素值,因此要轉(zhuǎn)換 a Elem
,TypeString
您首先要斷言切片類型,然后依次斷言每個(gè)元素:
itemsRaw := d.Get("example").([]interface{})
items := make([]string, len(itemsRaw))
for i, raw := range itemsRaw {
items[i] = raw.(string)
}
不幸的是,由于 Go 接口和類型斷言的設(shè)計(jì),無法一步直接從[]interface{}到。[]string
TypeMap如果您最終需要,您可以采取類似的方法map[string]string:
itemsRaw := d.Get("example").(map[string]interface{})
items := make(map[string]string, len(itemsRaw))
for k, raw := range itemsRaw {
items[k] = raw.(string)
}
TypeSet*schema.Set由于自定義容器,有點(diǎn)復(fù)雜,但是您可以調(diào)用Listset 的方法來獲取 a[]interface{}然后您可以像TypeList上面一樣對(duì)待它:
itemsRaw := d.Get("example").(*schema.Set).List()
items := make([]string, len(itemsRaw))
for i, raw := range itemsRaw {
items[i] = raw.(string)
}
- 1 回答
- 0 關(guān)注
- 307 瀏覽
添加回答
舉報(bào)