問題內(nèi)容
我剛剛讀到,map[Type]interface{} 指定了 Type 類型的鍵的映射,其值為any,即interface{}。
這不是與定義結(jié)構(gòu)幾乎相同嗎,即 type Name struct{ key1; value1, …., keyn: valuen}?
這兩種類型的映射有什么區(qū)別?
我讀了 https://www.digitalocean.com/community/tutorials/how-to-use-json-in-go 但我仍然不明白其中的區(qū)別。
或者我們以更通用的方式定義的 map[type] interface{} 的區(qū)別是什么?
通過結(jié)構(gòu)體我們定義每個(gè)鍵值對?
這兩種方法都只是定義由鍵值對組成的對象嗎?
正確答案
結(jié)構(gòu)體和映射是不同的數(shù)據(jù)結(jié)構(gòu)。他們有很多不同之處。這里只是一些:
結(jié)構(gòu)體具有固定數(shù)量的字段,這些字段聲明一次且無法更改。
3a15cefd8a1cc7ac8a7f27a0d3f9b13
地圖可以在運(yùn)行時(shí)增大或縮小。
vector := map[string]float64{ "x": 2.0, "y": 2.0, } vector["z"] = 2.0
登錄后復(fù)制
您可以循環(huán)遍歷地圖條目。
for key, val := range vector { fmt.Println(key, val) }
登錄后復(fù)制
結(jié)構(gòu)體不支持迭代(除非您使用反射)。
結(jié)構(gòu)體字段可以有標(biāo)簽(附加屬性):
type User struct { Name string `json:"name"` Password string `json:"password"` }
登錄后復(fù)制
地圖沒有此功能。