Go 检测任何模型值是否已更改的最简单方法

Go 检测任何模型值是否已更改的最简单方法,go,orm,go-gorm,Go,Orm,Go Gorm,我用的是Golang ORM。我需要检测是否有任何模型字段已更改以触发第三方API服务的更新 我试着用If语句测试每个字段,但是当模型有很多字段时,它会变得难看 var person Person db.Where("id = ?", id).First(&person) if person.Name != body.Person.Name || person.Age != body.Person.Age { // Trigger API update } db.Save(&a

我用的是Golang ORM。我需要检测是否有任何模型字段已更改以触发第三方API服务的更新

我试着用If语句测试每个字段,但是当模型有很多字段时,它会变得难看

var person Person

db.Where("id = ?", id).First(&person)

if person.Name != body.Person.Name || person.Age != body.Person.Age {
  // Trigger API update
}

db.Save(&person)

有没有一个简单的方法来实现这一点?

我不知道这是否是最简单的方法,但是你可以通过反射来实现这一点。下面的函数使用来比较两个
Person
结构,以查看每个字段的值是否相同,从而跳过
模型
结构(其内部独立于
Person
表示的数据元素而变化)

func(此人)等于(此人)bool{
这个:=反映(这个)的价值
vThat:=reflect.ValueOf(那个)
对于i:=0;i
您可以在代码段中使用此选项,如下所示:

if!人。等于(身体。人){
//触发API更新
}

请注意,我是一个新手,所以我可能会在“正确”代码方面误导您。但这确实有效。

GORM确实通过“更改”方法提供了这样的功能,该方法可以在更新前挂钩中使用。如果字段是否更改,它将返回