Go语言之Map非并发安全

作者: 灰常出色 | 来源:发表于2019-05-30 07:43 被阅读21次

一、问题描述:

一次使用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语言之Map非并发安全

    一、问题描述: 一次使用Go map的过程中,发现一个现象,map里面的元素是数据结构的话,该元素的属性不能直接赋...

  • Go语言高并发Map解决方案

    Go语言高并发Map解决方案 Go语言基础库中的map不是并发安全的,不过基于读写锁可以实现线程安全;不过在Go1...

  • Go Map 为什么是非线程安全的?

    Go map 默认是并发不安全的,同时对 map 进行并发读写的时,程序会 panic,原因如下:Go 官方经过长...

  • 详尽解析go中的fatal error: concurrent

    fatal error: concurrent map writes 问题出现的原因 go中的map不是并发安全的...

  • GO并发安全 Map

    场景1:一个请求同时进行2条数据库查询操作,然后把查询的数据,传给一个map,然后返回给客户端 问题代码 进行多次...

  • map与sync.Map

    Go 语言原生 map 并不是线程安全的,对它进行并发读写操作的时候,需要加锁。而 sync.map 则是一种并发...

  • Go语言——sync.Map详解

    Go语言——sync.Map详解 sync.Map是1.9才推荐的并发安全的map,除了互斥量以外,还运用了原子操...

  • Golang之Map源码

    引用 深入 Go 的 Map 使用和实现原理 哈希表 深度解密Go语言之map Golang map 的底层实现 使用

  • golang并发map记录

    1.普通map+mutex,实现map的并发安全读写 2.sync.Map 3.第三方并发安全map库

  • Go sync.Map

    map并发读线程安全,并发读写线程不安全。 sync.Map 读写分离 空间换时间 Map Golang1.6之前...

网友评论

    本文标题:Go语言之Map非并发安全

    本文链接:https://www.haomeiwen.com/subject/qvenzqtx.html