Я хотел бы написать функцию, которая принимает два произвольных типа через интерфейс, ищет общие поля и сравнивает их значения.
Одна - это структура, которая была связана с входом JSON, другое происходит из запросов к базе данных, в частности, последние имеют типы в пакете https://godoc.org/github.com/jackc/pgtype - я попытался упростить то, к чему я обращаюсь в следующем примере:
package main
type Int4 struct {
Int int32
}
func (i Int4) Get() int32 {
return i.Int
}
func (i Int4) Set(val int32) {
i.Int = val
}
type Varchar struct {
String string
}
func (v Varchar) Get() string {
return v.String
}
func (v Varchar) Set(val string) {
v.String = val
}
type existing struct {
ID Int4
Foo Varchar
Bar Int4
Baz Varchar
}
type changes struct {
Foo string
Bar int32
Baz string
}
func main() {
var a existing
a.ID.Set(1)
a.Foo.Set("afoo")
a.Bar.Set(123)
a.Baz.Set("bazza")
b := &changes{Foo: "bfoo", Bar: 321, Baz: "bazza"}
compareModels(a, b)
}
// compareModels should compare two structs with inconsistent properties but some Field names in common.
func compareModels(existingState interface{}, newState interface{}){
// desired output:
// Foo is not equal
// Bar is not equal
// Baz is equal
}