gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 03:27:54 26 4
gpt4 key购买 nike

使用 go 1.5gorm

假设我想创建一个 events 表,其中包含一个 created_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_id 的值和 updated_by_id。我需要做什么来确保 ByID 属性的列名称对于 CreatedByUpdatedBy 是不同的?

最佳答案

问题是您将 CreatedByUpdatedBy 都嵌入到 Event 中,因此调用 Event.By 不明确且不允许(您必须能够明确指定 Event.CreatedBy.ByEvent.UpdatedBy.By 以消除这两个字段的歧义)。

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

type Event struct {
CreatedBy CreatedBy
UpdatedBy UpdatedBy
}

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

当然,如果您只是为了列映射而将 By 嵌入到 CreatedByUpdatedBy 中,那么您不应该这样做需要声明新的struct:

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

type Event struct {
CreatedBy By
UpdatedBy By
}

关于go - 在golang中嵌入具有相同属性名称的模型结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34462118/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com