如何解决golang struct并发读写而没有锁定也可以运行吗??
从多个goroutine中至少其中一个是写操作的对任何变量的未同步并发访问是 。不要尝试以未定义的行为查找逻辑,只需使用适当的同步即可。未定义意味着它可能会“正确”运行,也可能“不正确”运行(给出错误的结果),或者崩溃或发生其他任何情况。那就是未定义的意思。
concurrentStructWithMuLock()
concurrentMap()
因此,这是运行时的有意崩溃,因为它检测到对映射的非同步访问。这是Go运行时的“功能”,它会使您的应用程序崩溃,因为您的应用程序中不应保留任何数据竞争(以防止发生未定义的行为)。
解决方法
package main
import (
"sync"
)
func main() {
// concurrentMap()
concurrentStruct()
// concurrentStructWithMuLock()
}
type Metadata struct {
mu sync.RWMutex //