【问题标题】:Embedding model structs with same attribute names in golang在 golang 中嵌入具有相同属性名称的模型结构
【发布时间】:2015-12-25 10:41:15
【问题描述】:

使用go 1.5gorm

假设我想创建一个包含 created_by_idupdated_by_id 列的 events 表。

我写我的模型像

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 的值。我需要做什么来确保ByID 属性的列名对于CreatedByUpdatedBy 是不同的?

【问题讨论】:

  • 嗨..我不明白这个问题。你能补充一些信息吗?

标签: go go-gorm


【解决方案1】:

问题是您将CreatedByUpdatedBy 都嵌入Event,因此对Event.By 的调用不明确且不允许(您必须能够指定Event.CreatedBy.By 和@ 987654326@ 明确区分这两个字段)。

最有可能的解决方案是不嵌入类型,而是实际创建一个具有显式字段的结构:

type Event struct {
    CreatedBy CreatedBy
    UpdatedBy UpdatedBy
}

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

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

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

type Event struct {
    CreatedBy By
    UpdatedBy By
}

【讨论】:

    猜你喜欢
    • 2019-05-28
    • 1970-01-01
    • 2015-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-14
    相关资源
    最近更新 更多