go routine同时对同一个结构的不同字段赋值会不会出问题, 大概像这样
type AA struct {
A int
B int
}
a:=AA{}
go func() {
a.A=1
}()
go func() {
a.B=2
}()
有疑问加站长微信联系(非本文作者)

go routine同时对同一个结构的不同字段赋值会不会出问题, 大概像这样
type AA struct {
A int
B int
}
a:=AA{}
go func() {
a.A=1
}()
go func() {
a.B=2
}()
有疑问加站长微信联系(非本文作者)
入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889
`单行代码`
这个是全局变量,整个包内共享,多个goroutine同时操作不是线程安全的,有这种情况建议加锁
一般map和slice才会有问题, map会直接崩,slice虽然不会崩,但是数据可能会丢失
如果只读是没问题的, 写的话有问题.
Go语言大佬Ross Cox的原话:“Don't communicate by sharing memory; Share memory by communicating."
在你的这里例子来看,不同的goroutine访问同一变量需要加锁。不过不推荐加锁,原因是影响性能。
不加锁,有什么好办法
加锁的话可以使用互斥锁、读写锁,配合waitGroup,或者条件变量; 不加锁就是通过 chan , 当一个 goroutine 中操作完毕,发出信号,第二个再处理;