在 Go 例程中迭代映射?
有志者,事竟成!如果你在学习Golang,那么本文《在 Go 例程中迭代映射?》,就很适合你!文章讲解的知识点主要包括,若是你对本文感兴趣,或者是想搞懂其中某个知识点,就请你继续往下看吧~
问题内容我在不久前编写的一些旧代码上看到一些“致命错误:并发映射迭代和映射写入”。我一直在尝试诊断问题,并且遇到了类似于下面的演示链接的代码块。
对我来说,迭代返回的映射(通过引用传递)似乎是错误的,即使它是在带锁的函数中返回的。
我正在寻找关于为什么这似乎不会引发上述错误的解释。
我知道现在有 RWMutex 和同步映射,但这段代码是不久前编写的,我正在寻找功能的解释而不是改进。
https://play.golang.org/p/_RY-QAyGE2W
我假设上面的代码会抛出“致命错误:并发映射迭代和映射写入”,但它似乎工作没有问题。
解决方案
这更好地说明了这一点:https://play.golang.org/p/RiWTxBoNqwD 它不会在演示中运行,但如果您从命令行运行它,它几乎会立即崩溃。
映射的迭代不受互斥锁的保护。仅返回地图引用的行为受到保护。
这几乎是一样的,但是整个迭代都受到互斥锁的保护:https://play.golang.org/p/cQNs3x_k-SL 或这个 https://play.golang.org/p/ydjprgvF6aE
今天关于《在 Go 例程中迭代映射?》的内容介绍就到此结束,如果有什么疑问或者建议,可以在编程网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341