сравнить два значения различного типа (но идентичного базового типа) - PullRequest
0 голосов
/ 27 марта 2019

Как сравнить значения двух переменных, которые имеют разные типы, но один и тот же базовый тип.

type   SomeID    uint8
type   OtherID   uint8

func areEqual(sid SomeID, oid OtherID) bool {
   // error: mismatched types
   return sid == oid
}

Ответы [ 2 ]

3 голосов
/ 27 марта 2019

Как уже упоминалось в mkopriva, для сравнения значений необходимо преобразование типов.

https://tour.golang.org/basics/13

func areEqual(sid SomeID, oid OtherID) bool {
   return uint8(sid) == uint8(oid)
}
0 голосов
/ 28 марта 2019

Вы можете быть менее точным, вам не нужно помнить основной тип

func areEqual(sid SomeID, oid OtherID) bool {
   return sid == SomeID(oid)
}

И вы можете быть более общим

func areEqual(x, y interface{}) (bool, error) {
    xv := reflect.ValueOf(x)
    yv := reflect.ValueOf(y)
    if yv.Type().ConvertibleTo(xv.Type()) {
        return xv.Interface() == yv.Convert(xv.Type()).Interface(), nil
    } else {
        return false, errors.New("Types are mismatched")
    }
}

Детская площадка

...