在golang中嵌入具有相同属性名称的模型结构

时间:2015-12-25 10:41:16

标签: go go-gorm

使用go 1.5gorm

说我想制作一个eventscreated_by_id列的updated_by_id表。

我写的模型就像

type By struct {
    ByID sql.NullInt64
    By *User
}

type CreatedBy struct {
    By
}

type UpdatedBy struct {
    By
}

type Event struct {
    CreatedBy
    UpdatedBy
}

当我尝试保存event对象时,我会尝试保存列by_id的值,而不是created_by_idupdated_by_id的值。我需要做些什么才能确保ByIDCreatedBy的{​​{1}}属性的列名称不同?

1 个答案:

答案 0 :(得分:0)

问题在于您将CreatedByUpdatedBy同时嵌入Event,因此对Event.By的调用含糊不清且不允许(您必须是能够明确指定Event.CreatedBy.ByEvent.UpdatedBy.By以消除两个字段的歧义。)

解决方案很可能是没有嵌入类型,但实际上创建了一个带有显式字段的结构:

type Event struct {
    CreatedBy CreatedBy
    UpdatedBy UpdatedBy
}

gorm现在应该知道如何消除两列的歧义。

当然,如果您只是为了列映射而将By嵌入CreatedByUpdatedBy,那么您不需要声明新的struct S:

type By struct {
    ByID sql.NullInt64
    By *User
}

type Event struct {
    CreatedBy By
    UpdatedBy By
}