为了账号安全,请及时绑定邮箱和手机立即绑定

没有 goroutines 覆盖的 Go lang 全局变量

没有 goroutines 覆盖的 Go lang 全局变量

Go
月关宝盒 2021-06-01 10:49:02
我正在用 Go 编写一个 CMS 并且有一个会话类型(用户 ID、要呈现的页面内容等)。理想情况下,我希望该类型是一个全局变量,因此我不必通过所有嵌套函数传播它,但是具有这样的全局变量显然意味着每个新会话都会覆盖它的前任,这不必要地说,这将是一个史诗般的失败。某些语言提供了一种在线程中保留全局变量的方法,该线程保留在该线程中(即,该全局变量的值在该线程中被沙箱化)。虽然我知道 Goroutines 不是线程,但我只是想知道是否有类似的方法可供我使用,或者我是否必须通过不同的嵌套例程向下传递我的会话类型的本地指针。我猜频道不会这样做?从我可以收集到的(如果我在这里错了,请纠正我),但它们基本上只是一种共享全局变量的安全方式?编辑:我忘记了这个问题!无论如何,对于任何好奇的人来说,这是一个更新。这个问题是我刚接触 Go 时写的,CMS 基本上是我的第一个项目。我来自 C 背景,熟悉 POSIX 线程,但我很快意识到更好的方法是在模式函数设计中编写代码,将会话对象作为函数参数中的指针传递。这为我提供了我所追求的上下文敏感的本地范围,同时还最大限度地减少了我正在复制的数据量。然而,作为一个已有 7 年历史的项目,并且是我开始向 Go 过渡的项目,可以说该项目无论如何都可以进行重大重写,因为犯了很多错误。不过,这是另一天的问题 - 目前它有效并且我有足够的其他项目正在进行中。
查看完整描述

3 回答

?
慕运维8079593

TA贡献1876条经验 获得超5个赞

不要使用全局变量。使用 Go 协程局部变量。

go-routine ID..

已经有 goroutine-local 变量:它们被称为函数参数、函数返回值和局部变量。


查看完整回答
反对 回复 2021-06-07
  • 3 回答
  • 0 关注
  • 266 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信