在Go语言中跨包访问变量

9

我在主包 main的作用域中有两个变量,它们分别是:

var (
    app Application
    cfg Config
)

现在,由于我的应用程序的规模开始增加,我决定将网站的每个模块放入自己的包中,就像一个子目录一样:

/src/github.com/Adel92/Sophie
  + user/   (package user)
     - register.go
     - login.go
     - password.go
  + topic/  (package topic)
     - ... etc
  - main.go (package main)

我该如何访问其他包中的appcfg全局变量?这是错误的做法吗?我感觉是。

如果是这样的话,我该如何在它们自己的命名空间中声明函数,以便我不必一直使用附有usertopic的名称。

1个回答

11

首字母大写的变量名称可以被导出以便在其他包中使用,所以AppCfg是可用的。然而,通常不建议使用子包进行命名空间; 包旨在提供离散的、自包含的功能,因此这种使用方式通常会带来更多的麻烦(例如,导入循环是严格不可能的,所以如果您在这个布局中有两个需要相互通信的子包,那么就没戏了)。

如果您发现需要为事物添加usertopic前缀以避免名称冲突,则也许应该将基础概念分解为自己的包,并为usertopic各创建一个实例?


这是没有意义的,因为用户/主题不是独立的事物,它们严重依赖于包main中的功能。 - Jesse Brands
既然似乎没有更好的选择,那我就点赞并接受这个答案。谢谢。 - Jesse Brands
3
如果用户/主题在主包功能上有很大的依赖性,那就意味着它们应该属于主包。因为你不能有依赖循环,依赖关系只应该从主程序“向下”流动。 - Evan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接