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