gpt4 book ai didi

go - 检测模型值是否发生变化的最简单方法

转载 作者:行者123 更新时间:2023-12-02 20:10:14 25 4
gpt4 key购买 nike

我正在使用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(&person)

有没有简单的方法可以实现这一点?

最佳答案

我不知道这是否是最简单的方法,it is probably not idiomatic ,但你可以通过反射(reflection)来实现这一点。以下函数使用 reflect Package比较两个Person结构体来查看每个字段的值是否相同,跳过 Model struct(其内部结构独立于 Person 代表的数据元素而变化)。

func (this Person) Equals(that Person) bool {
vThis := reflect.ValueOf(this)
vThat := reflect.ValueOf(that)
for i := 0; i < vThis.NumField(); i++ {
if vThis.Field(i) != vThis.FieldByName("Model") {
if vThis.Field(i).Interface() != vThat.Field(i).Interface() {
return false
}
}
}
return true
}

您可以在代码片段中使用它,如下所示:

if !person.Equals(body.Person) {
// Trigger API update
}

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

关于go - 检测模型值是否发生变化的最简单方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58805260/

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