如何比较具有不同类型但基础类型相同的两个变量的值。
type SomeID uint8
type OtherID uint8
func areEqual(sid SomeID, oid OtherID) bool {
// error: mismatched types
return sid == oid
}
正如 mkopriva 所提到的,需要类型转换来比较值。
https://tour.golang.org/basics/13
func areEqual(sid SomeID, oid OtherID) bool {
return uint8(sid) == uint8(oid)
}
你可以不太准确,你不需要记住底层类型
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")
}
}
操场