Go:每个项目有多少个包

今天在我的 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

    ...

也就是说,这是我的问题:

  • 你会如何解决这个问题?你会把videoengine包结合起来吗?重新设计您的程序,以便video不再依赖于engine?

  • 您如何决定何时适合制作新包装?您是否基于功能?你按类别分组吗?

  • 你对这个main包有多大用处?我个人倾向于尽快摆脱它,也许是因为我太习惯 OOP。


慕慕森
浏览 145回答 1
1回答

慕神8447489

由于这些问题相当广泛且针对特定项目,我只能希望这对您有所帮助:就个人而言,我会尝试创建第三个包上都video和engine可以依靠。但是,根据项目的不同,这可能是一件困难的事情,它们可能需要合并。一个新的包通常是关于一个特定的任务。根据项目的不同,这可能是数据库 I/O,也包括所有模型 - 但它也可能是一个仅用于从磁盘读取配置文件的包。由于我构建的主要是 Web 应用程序,因此我使用该main包来开始工作:侦听端口、调用其他函数、确保正确关闭数据库连接等。示例(不确定是否有帮助?):我曾经有一个关于配置 (&nbsp;config) 的包,它指的是其余的包(出于某种原因)。然而,其他包依赖于config.&nbsp;这是main包可以派上用场的地方:config通过参数将包与其他包链接。VonC 的评论也非常有用和详尽。它可能会帮助你更多。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go