为了账号安全,请及时绑定邮箱和手机立即绑定

Go:每个项目有多少个包

Go:每个项目有多少个包

Go
慕慕森 2021-09-09 15:28:05
今天在我的 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个赞

由于这些问题相当广泛且针对特定项目,我只能希望这对您有所帮助:

  • 就个人而言,我会尝试创建第三个包上都videoengine可以依靠。但是,根据项目的不同,这可能是一件困难的事情,它们可能需要合并。

  • 一个新的包通常是关于一个特定的任务。根据项目的不同,这可能是数据库 I/O,也包括所有模型 - 但它也可能是一个仅用于从磁盘读取配置文件的包。

  • 由于我构建的主要是 Web 应用程序,因此我使用该main包来开始工作:侦听端口、调用其他函数、确保正确关闭数据库连接等。


示例(不确定是否有帮助?):

我曾经有一个关于配置 ( config) 的包,它指的是其余的包(出于某种原因)。然而,其他包依赖于config. 这是main包可以派上用场的地方:config通过参数将包与其他包链接。


VonC 的评论也非常有用和详尽。它可能会帮助你更多。


查看完整回答
反对 回复 2021-09-09
  • 1 回答
  • 0 关注
  • 144 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信