首页 > 解决方案 > 游戏服务器的 Golang 目录组织

问题描述

我在 golang 中制作游戏服务器,我有这样的实体PlayerSkill. Player可以使用他的技能,同时Skill可以影响玩家。Player文件和技能文件位于logic目录(和package logic)中。我想将技能文件移动到单独的目录skills中。我无法将它放在逻辑目录中并为他们保留逻辑包,因为 golang 不允许它。我也无法将目录制作package skills和放置在与逻辑目录相同的级别,因为我得到了:

不允许导入周期

package main
imports projname/server/logic
imports projname/server/skills
imports projname/server/logic

我的项目架构有什么问题,我该如何解决?

标签: goarchitecture

解决方案


你的main包裹imports logic包裹。它也进口skillswhich 也imports logic。Go 对不允许导入周期非常严格。

  • 如果您被迫import logicin main,因为您正在使用 in 中声明的某种类型logic来初始化 in 中的函数或处理程序skills。您可能会声明该类型 inskills而不是 in logic

  • 如果您正在importinglogic中使用逻辑中的某些功能mainskills您可以在(使用新函数)中编写一个包装器,该包装器从logic(已被调用)调用该函数。

无论哪种方式,您都必须尝试删除logicin的导入main


推荐阅读