选项1显然可以被多个goroutine调用
ip,并带有一个新的并发调用,并且只有
if块中的最后一个会被存储。由于
buildComplexActivityObject在关键部分有更多的时间,因此花费的时间越长,这种可能性就会大大增加。
选项2有效,但是
buildComplexActivityObject每次都调用,而您声明的状态不是您想要的。
鉴于您希望
buildComplexActivityObject不经常拨打电话,第三个选项是唯一有意义的选项。
该
sync.Map但是不能保护实际
activity被存储的指针的参考价值。在更新
activity值时,您还需要在那里进行同步。



