Go语言之Map非并发安全

ZhDavis · · 2053 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

转自“灰子学技术”公众号

原文链接:https://mp.weixin.qq.com/s/MAur04OmVPH5sb1tMFExNA

一、问题描述:

一次使用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

灰子学技术公众号,欢迎大家,讨论,评论,相互学习。


有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

2053 次点击  
加入收藏 微博
被以下专栏收入,发现更多相似内容
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传