我面临的问题更多是代码设计,而不是具体的相关问题。我正在构建一个简单的 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/