go - 如何确定哪些数据库表列需要从修改后的结构中更新?

标签 go

我面临的问题更多是代码设计,而不是具体的相关问题。我正在构建一个简单的 CRUD 应用程序,除了更新部分之外,一切似乎都很顺利:我有一个简单的结构类型:

type User struct {
   ID string
   Name string
   Password string
}

和数据存储层的接口(interface):

type Store interface {
    ...
    Update(user *User) error
    ...
}

问题是,对于大多数数据库驱动程序,您不能只传递整个结构实例并希望他们的系统知道哪些字段被修改,整个文档/行被替换。我应该如何跟踪哪些字段被修改(以便我可以相应地在存储层中更新它们)?也许将我想修改的所有字段作为 interface{} 的映射传递给 Update 函数?

最佳答案

有很多方法可以实现这一目标。例如,您可以使用 setter 来更改值。因此您可以跟踪更新的字段。 像这样:

type User struct {
   ID string
   Name string
   Password string
   updateFields map[string]bool
}

func (u *User) SetName(name string) {
   u.Name = name
   updateFields["name"] = true
}

您可以通过反射使用更自动化的方式。

关于go - 如何确定哪些数据库表列需要从修改后的结构中更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55551504/

相关文章:

go - 如何在 `log` 中包含我的 `log` 包而不是内置的 `golang` 包?

methods - 方法接收器作为指针与否之间的区别

go - 为什么我无法使用 GO 客户端在我的 prisma 查询中获取相关字段?

去运行性能

go - 是否可以一次上传多个文件

go - channel 只接受一次值 - golang

elasticsearch - 如何在 elasticsearch 中只存储有限数量的文档。

go - 如何通过 golang 或 C# 以外的其他语言将 EWS 获取项目正文传输到 PST 文件

go - 我可以在main中定义一个接收方法吗?

go - 在磁盘上存储结构树