8
なぜ秒が真である間に最初の結果がfalseであるのか分かりません。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
0
は、そのデフォルトタイプint
ある、ないuint64
型を持たない定数であり、およびインタフェースとの比較をするとき、あなたがに比較している事は同じタイプの両方でなければならないので、ここでGo playground
なぜ 'i(uint64)== 0'のような型アサーションを使用できますか?コンパイラは '0'も' uint64'ですか? https://play.golang.org/p/YT-pZCdI27 – Ngenator
タイプアサーションを実行すると、インタフェースと値を比較しなくなり、値と値を比較しているので、ダイナミックタイプは等しい必要があります。 – dave
技術的には '0'は' int'ではありませんが、それは ''型指定されない定数 ''(https://golang.org/ref/spec#Constants)です。表現。 – JimB