gin中接口外面定义的结构体是线程安全的吗?
type Wx struct {
Public
Third
scope string
httpType string
state string
code string
openid string
isThird bool
grant_type string
}
var wx Wx
// 这是接口入口函数
func Login(c *gin.Context) {
wx.code = "some code"
}
像这样的结构,如果有个同文件函数也在往wx里赋值属性,那么在当前这个请求中结构体wx是安全的吗?会不会导致线程中的请求修改的同一个Wx结构体?如果是要怎么修改?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
这么定义的变量
wx
是全局变量,在整个包级别共享。当有多个goroutine
去修改的时候不是线程安全的。在极端情况下,一个
goroutine
对变量的修改时另外一个变量读取会导致读取到的是旧值。解决方法很简单,加锁。定义一个包级别锁,对
wx
修改时加锁。