go - 使用不同模块在本地项目中共享实例

标签 go

我的项目结构如下

myproj
   src
      server
         main.go
      helpres
          helper1.go
          helpr2.go
       utils
          utils1.go
          utils2.go

这是main.go函数中的代码

import “myproj/utils”
import “myproj/helpers”

var log obj    *obj



func init() {
    log = initLog()
    util.passLog(log)
    helper.passLog(log)
    //And then helper and util can use it ...is it the right way to do it ? 
}

func main(){

    log.write()

}

现在我可以在 server -> main.go 中使用 obj1, 但我也想在 helper1.goutils2.go 中使用相同的实例 而不是在每个模块上创建新的,(稍后我从 server->main.go 中的 helperutil 调用一些功能) 打高尔夫球应该怎么做?

最佳答案

不推荐在包之间共享对象,因为当出现问题时很可能会变得困惑。调试和找出 obj 从哪里调用或改变将变得困难。相反,尝试将 obj 作为参数传递给 helper1utils2

如果您确实确实想要共享该对象,请将名称更改为以大写字母开头,Obj。这样变量就可以从你的包中导出,并且可以从其他地方使用。请注意,这会将 Obj 暴露给所有想要获取和(误)使用它的人。

编辑: 将 obj 传递给 helper 中的函数:

helper.doSomethingHelpfulWith(obj)

关于go - 使用不同模块在本地项目中共享实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47689781/

相关文章:

go - golang中如何实现虚函数?

go - GO Lang 中的 HTTP POST 抛出错误

parsing - Go 中的上下文无关文法 (CFG) 解析器

Go 系统调用 EnumProcessModules

go - goroutine 调用行之后的行是否比 goroutine 的第一行更早开始?

unit-testing - Go Martini 单元测试示例

go - 读取文件中的多个 yaml

concurrency - 为什么带有填充字段的结构工作得更快

algorithm - 计算模逆

go - 不显示 revel flash 消息