【发布时间】:2014-12-08 00:13:21
【问题描述】:
今天在处理我的 Go 项目时,我意识到我遇到了一个小问题。我有一个package,它有一个struct,它持有一个指向另一个package 的结构的指针。但是,package 也使用了另一个包中的结构。在 C 和 C++ 中,这不会造成问题,因为我会使用标头保护。但是,在 Go 中,由于无限的import 递归,这样的程序将无法编译。
这让我想知道,我的项目中是否有太多的包?我应该喜欢更大的包裹吗?我一直被告知,每个包都应该专注于一件事。
现在,我的结构是这样的。
game/ <-- imports engine, needs to access the resource manager a lot
video/ <-- rendering goes here
renderer.go
shader.go
scene.go
...
engine/ <-- imports video, file, etc
root.go <-- contains a Root struct, handles initialisation etc
resource.go
...
file/
dds.go
config.go
resource_list.go
script.go
...
main.go
...
也就是说,这是我的问题:
-
你会如何解决这个问题? 你会合并
video和engine包吗?重新设计您的程序,使video不再依赖于engine? - 您如何决定何时适合制作新包?您是否基于功能?你按类别分组吗?
-
您对
main包有多大用处?我个人倾向于尽快摆脱它,可能是因为我太习惯于 OOP。
【问题讨论】:
-
包组织:stackoverflow.com/a/20394211/6309,stackoverflow.com/q/9985559/6309。您可以在不同的文件夹中有多个主包(“命令”模式)
-
Protip:每当你称某物为“引擎”时,它的作用就太大了。
-
@rightføld 这只是一个没有更好用词的名字,它实际上是一个非常小的包。
标签: go project-management packages directory-structure