码:
type t_struct struct {
player string
id int
}
func main() {
dataA := make(map[string]t_struct)
dataB := make(map[string]*t_struct)
var playerA t_struct
playerA.player = "tom"
playerA.id = 1
dataA["classA"] = playerA
dataA["classA"].id = 2 // ERROR, why?
playerB := new(t_struct)
dataB["classB"] = playerB
dataB["classB"].player = "rick"
dataB["classB"].id = 3
}
Run Code Online (Sandbox Code Playgroud)
并得到错误:
无法分配给dataA ["classA"].id
我想知道为什么dataA["classA"].id = 2不工作但是dataB["classB"].id = 3呢?如果要修改它的成员值,它是将结构指针保存到地图的唯一方法吗?
表达式dataA["classA"]if类型t_struct.这意味着
dataA["classA"].id = 2
Run Code Online (Sandbox Code Playgroud)
是等价的,例如
t_struct{"some player", 42}.id = 2
Run Code Online (Sandbox Code Playgroud)
IOW,struct值没有"home",并且不能保持更改其字段.由于唯一的可能性是程序员的错误,编译器会标记错误.
OTOH:
dataB["classB"]
Run Code Online (Sandbox Code Playgroud)
有类型*t_struct.然后
dataB["classB"].id = 3
Run Code Online (Sandbox Code Playgroud)
相当于
(*t_struct)(somePointer).id = 3
Run Code Online (Sandbox Code Playgroud)
也就是说,这个左撇子有一个"家".这是指针指向的位置.对字段的更改将在那里"记录",因此它是一个有效的Go操作(对结构字段的简单赋值,其中结构由指针引用).
| 归档时间: |
|
| 查看次数: |
342 次 |
| 最近记录: |