今天在我的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。答案 0 :(得分:1)
由于这些问题相当广泛且项目特定,我只能希望这有任何帮助:
video
和engine
都可以依赖。但是,根据项目的不同,这可能很难做到,而且可能需要合并。main
包来启动:收听端口,调用其他函数,确保数据库连接正确关闭等。示例(不确定是否有用?):
我曾经有一个只是配置(config
)的包,它引用了其余的包(出于某种原因)。但是,其他包取决于config
内的配置。这是main
包可以派上用场的地方:通过参数将config
包与其他包链接起来。
VonC的评论也非常有用和精细。它可能会帮助你更多。