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

Go 如何确定需要从修改的结构更新哪些数据库表列?,go,Go,我面临的问题更多的是一个代码设计,而不是具体的去相关。我正在构建一个简单的CRUD应用程序,除了更新部分外,其他一切似乎都进行得很顺利和简单:我有一个结构类型,如下所示: 类型用户结构{ ID字符串 名称字符串 密码字符串 } 以及数据存储层的接口: 类型存储接口{ ... 更新(用户*用户)错误 ... } 问题是,对于大多数数据库驱动程序,您不能只传递整个struct实例并希望其系统知道哪些字段被修改,而替换整个文档/行。我应该如何跟踪哪些字段被修改(以便在存储层中相应地更新它们)?也许

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

类型用户结构{
ID字符串
名称字符串
密码字符串
}
以及数据存储层的接口:

类型存储接口{
...
更新(用户*用户)错误
...
}

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

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

根据您的结构,查找更改的内容可能比只写整个记录签出更昂贵,尽管它也有其自身的限制/问题。我只写更新函数来更新除密码之外的所有内容。在处理程序中,我获取记录,将行扫描到struct中,将请求JSON封送到该struct中(如果存在,则用请求体中的值覆盖DB值),然后将struct传递给update方法进行保存。。