一、问题描述:
一次使用Go map的过程中,发现一个现象,map里面的元素是数据结构的话,该元素的属性不能直接赋值。
会提示编译错误:
./prog.go:11:15: cannot assign to struct field testMap[1].x in map
例子如下:
编译错误:./prog.go:11:15: cannot assign to struct field testMap[1].x in map
二、原因:
Go 里面的map不是并发安全的,导致了这个情况的出现,这与map在Go中的底层实现息息相关。(备注:map的实现后续会补充。)
三、解决方法:
比较简单的解决方法是下面这种,找个临时变量替换一下,绕过它即可,不过代码读起来有些奇怪,但是它确实工作了。
output:test X: map[1:{5}]
参考资料:
proposal: spec: cannot assign to a field of a map element
灰子作于二零一九年五月三十日。