Go中的结构映射与结构数组

假设我有一个带有字符串属性 b 的简单结构 a:


type A struct {

    B string

}

以下代码使用 A 类型的数组:


testArray := []A{A{}}

testArray[0].B = "test1"

fmt.Println(testArray[0].B)

将按预期打印出“test1”。


但是这段代码看起来同样简单:


testMap := make(map[string]A)

testMap["key"] = A{}

testMap["key"].B = "test2"

fmt.Println(testMap["key"].B)

不会打印出“test2”,而是会导致以下错误:


无法分配给 testMap["key"].B


那么,为什么分配给映射中的子属性会导致错误,同时分配给数组中的子属性按预期工作?我想知道为什么这对地图不起作用以及为什么它对数组起作用。我也很想知道为什么他们设计语言时会在两种数据结构之间存在这种差异。


千巷猫影
浏览 774回答 3
3回答

HUWWW

在邮件列表上回答了一些长度,但简短的解释是这不起作用,因为地图条目不可寻址。这意味着您无法获取地图中条目的地址。那是因为向地图添加新值可能会导致地图条目移动,从而导致地址发生变化。因为您不能在地图中获取条目的地址,所以所有地图操作都使用整数值:从地图中复制一个整数值,将一个整数添加到地图中。分配给映射中结构的一个字段将需要读取-修改-写入操作,而映射不支持(它们可以,但不支持,并且支持它们需要成本)。数组和切片中的元素是可寻址的,因为它们在创建后不会移动。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Ruby