Я не понимаю, почему первый результат является ложным, а второй - истиной.интерфейс и целочисленное сравнение в golang
Любая помощь будет оценена по достоинству.
func main() {
var i interface{}
i = uint64(0)
fmt.Println("[1] ", reflect.TypeOf(i), i == 0)
i = 0
fmt.Println("[2] ", reflect.TypeOf(i), i == 0)
var n uint64 = 32
fmt.Println("[3] ", reflect.TypeOf(n), n == 32)
}
// result
// [1] uint64 false
// [2] int true
// [3] uint64 true
Попробуйте здесь Go playground
Почему вы можете использовать утверждение типа, такое как 'i. (Uint64) == 0'? Представляет ли компилятор '0' также' uint64'? https://play.golang.org/p/YT-pZCdI27 – Ngenator
Как только вы выполните утверждение типа, вы больше не сравниваете интерфейс со значением, вы сравниваете значение со значением, поэтому вы теряете требование своих динамические типы должны быть равными. – dave
Технически '0' не является' int', это ["нетипированная константа"] (https://golang.org/ref/spec#Constants), которая преобразуется в тип 'int' по умолчанию из-за его размещения в выражение. – JimB