mirror of
https://gitee.com/dromara/mayfly-go
synced 2025-11-05 00:40:24 +08:00
23 lines
627 B
Go
23 lines
627 B
Go
|
|
package structx
|
||
|
|
|
||
|
|
import "reflect"
|
||
|
|
|
||
|
|
// DiffFields 比较两个结构体中指定字段的属性值是否发生改变,并返回改变的字段名
|
||
|
|
func DiffFields[T any](t1 T, t2 T, fieldsToCompare ...string) []string {
|
||
|
|
var changedFields []string
|
||
|
|
|
||
|
|
oldValue := reflect.ValueOf(t1)
|
||
|
|
newValue := reflect.ValueOf(t2)
|
||
|
|
|
||
|
|
for _, fieldName := range fieldsToCompare {
|
||
|
|
oldFieldValue := oldValue.FieldByName(fieldName)
|
||
|
|
newFieldValue := newValue.FieldByName(fieldName)
|
||
|
|
|
||
|
|
if !reflect.DeepEqual(oldFieldValue.Interface(), newFieldValue.Interface()) {
|
||
|
|
changedFields = append(changedFields, fieldName)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
return changedFields
|
||
|
|
}
|