我有两个主要的域实体,User和Project,它们具有多对多的关系。当我试图从另一个引用它们时(即,User中的一个项目切片和Project中的一个用户切片),我最终在包结构中得到了一个循环依赖。下面是我的模型的简化版本:
// in user package
type User struct {
gorm.Model
...
Projects []project.Project `gorm:"many2many:user_projects;"`
}
// in project package
type Project struct {
gorm.Model
...
Users []user.User `gorm:"many2many:user_projects;"`
}
我理解为什么会出现循环依赖,但我一直在努力寻找最好的方法来重构我的代码,以保持这种多对多的关系,同时保持Go语言中的习惯用法。我考虑过一些解决方案:
- 将引用从项目放回用户。
- 引入一个中间UserProject类型(本质上表示连接表)。
- 使用接口。
在Go语言中处理这种情况的惯用方法是什么?任何指针或例子将不胜感激!提前感谢!
1条答案
按热度按时间bihw5rsg1#
尝试将所有模型移动到单独的包中,例如:
软件包用户:
Package 项目: