Golang是包块变量线程安全吗?

时间:2014-01-04 17:25:14

标签: go

根据Go规范:

“在顶层(在任何函数之外)声明的表示常量,类型,变量或函数(但不是方法)的标识符的范围是包块。”

包块变量是否安全?例如。如果我有一个包块变量来存储Web应用程序的当前用户:

var CurrentUser *string

请求1进来:将CurrentUser设置为“John” 请求2进来:将CurrentUser设置为“Fred”

在请求1中,CurrentUser的值是什么?

1 个答案:

答案 0 :(得分:5)

不,包变量不是线程安全的。

在您的示例中,CurrentUser可以随时从“John”更改为“Fred” - 尽管goroutine处理请求1不是保证以查看更改。

因此,您需要使用局部变量来存储不同goroutine的不同数据。