今天在我的 Go 项目中工作时,我意识到我遇到了一个小问题。我有一个 a package,它包含struct一个指向另一个 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。
1 回答
慕神8447489
TA贡献1780条经验 获得超1个赞
由于这些问题相当广泛且针对特定项目,我只能希望这对您有所帮助:
就个人而言,我会尝试创建第三个包上都
video
和engine
可以依靠。但是,根据项目的不同,这可能是一件困难的事情,它们可能需要合并。一个新的包通常是关于一个特定的任务。根据项目的不同,这可能是数据库 I/O,也包括所有模型 - 但它也可能是一个仅用于从磁盘读取配置文件的包。
由于我构建的主要是 Web 应用程序,因此我使用该
main
包来开始工作:侦听端口、调用其他函数、确保正确关闭数据库连接等。
示例(不确定是否有帮助?):
我曾经有一个关于配置 ( config
) 的包,它指的是其余的包(出于某种原因)。然而,其他包依赖于config
. 这是main
包可以派上用场的地方:config
通过参数将包与其他包链接。
VonC 的评论也非常有用和详尽。它可能会帮助你更多。
- 1 回答
- 0 关注
- 144 浏览
添加回答
举报
0/150
提交
取消