Сравнивая поля структуры из двух интерфейсов, не зная их типа? - PullRequest
0 голосов
/ 18 февраля 2020

Я хотел бы написать функцию, которая принимает два произвольных типа через интерфейс, ищет общие поля и сравнивает их значения.

Одна - это структура, которая была связана с входом 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

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...