我在 package 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)
我将如何四处访问来自其他包的 app
和 cfg
全局变量?这是错误的做法吗?我有一种感觉。
在那种情况下,我将如何在它们自己的命名空间中声明函数,这样我就不必疯狂地使用附加有 user
和 topic
的名称时间。
最佳答案
大写的变量名被导出以便在其他包中访问,因此 App
和 Cfg
可以工作。但是,通常不推荐使用子包来命名空间;包旨在用于离散的、独立的功能,因此以这种方式使用它们通常比使用它们更麻烦(例如,导入周期是绝对不可能的,因此如果您在这种布局中有两个子包需要与彼此那么你就不走运了)。
如果您发现需要使用 user
和 topic
作为前缀以避免名称冲突,那么也许应该将基本概念纳入其自己的包中,您可以为 user
创建一个实例,为 topic
创建一个实例?
关于scope - 在 Go 中跨包访问变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22735325/