gpt4 book ai didi

map - 无法从 map 分配给结构成员

转载 作者:IT王子 更新时间:2023-10-29 01:50:31 25 4
gpt4 key购买 nike

代码:

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
}

出现错误:

cannot assign to dataA["classA"].id

我想知道为什么 dataA["classA"].id = 2 不起作用但 dataB["classB"].id = 3 起作用了?如果要修改它的成员值,是否只有将结构指针保存到 map 中?

最佳答案

表达式 dataA["classA"] 如果类型为 t_struct。也就是说

dataA["classA"].id = 2

等同于例如

t_struct{"some player", 42}.id = 2

Playground

IOW,结构值没有“家”,并且不能持久更改其字段。由于唯一的可能性是程序员的错误,编译器会标记错误。

大哥:

dataB["classB"]

具有类型 *t_struct。然后

dataB["classB"].id = 3

相当于

(*t_struct)(somePointer).id = 3

也就是说,这个左值有一个“家”。这是指针指向的地方。对该字段的更改将被“记录”在那里,因此它是一个有效的 Go 操作(简单地分配给一个结构字段,其中该结构由一个指针引用)。

关于map - 无法从 map 分配给结构成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16059038/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com