我有两个set对象,它们非常相似,但不完全相同。 由protobuf生成:
// generated by protobuf
type User struct {
Id string
Name string
Group []string
}
type Group struct {
Id string
Name string
}
还有Gorm类型,它们相似但不完全相同:
// gorm storage definition
type User struct {
ID string `gorm:"primary_key;size:36;"`
Name string
Groups []*Group `gorm:"many2many:user_groups;"`
}
type Group struct {
ID string `gorm:"primary_key;size:36"`
Name string
Users []*User `gorm:"many2many:user_groups;"`
}
我想执行以下操作:
var users []*pb.User
s.db.Preload("Groups").Find(&users).Related("Groups")
并获取使用User对象和组ID填充的protobuf用户。不幸的是,我得到了这样的内存地址字符串:[0xc0001de460 0xc0001de5a0]
。
天真的方法是对用户进行循环,然后附加所有组ID,并使用它创建pb.User对象。我不喜欢它,可能会很慢。
考虑到many2many
根本不将组存储在users
表中,应该有一种方法可以检索组ID并将它们包括在user_groups
表的结果中。
但是我无法完善文档中的解决方案,只能手动完成几乎所有操作(SQL查询,扫描等)。