我有两个主要域实体,用户和项目,它们具有多对多关系。当我尝试相互引用时(即,用户中的一部分项目和项目中的一部分用户),我最终在包结构中出现了循环依赖。这是我的模型的简化版本:
// 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 中的惯用语。我考虑过的一些解决方案:
Go 中处理此类情况的惯用方法是什么?任何指针或示例将不胜感激!提前致谢!
我的建议是启用一个新的
dto
域实体作为查询结果对象。有时我需要附加额外的表并获取字段,以便可以轻松扩展 dto
对象。喜欢:
type UserDto struct{
// embed the original object, or just the necessary field
user.User
Projects []project.Project `gorm:"many2many:user_projects;"`
OtherField int
...
}
type ProjectDto struct{
project.Project
Users []user.User `gorm:"many2many:user_projects;"`
OtherField int
...
}