私はこのコードを持っています。インターフェイスが int にアサートされる型であると期待しています。ただし、インターフェイスのタイプは代わりに float64 です。なぜこれが起こっているのか誰でも説明できますか?そして、それを回避する最善の方法は何ですか。
package main
import (
"fmt"
"encoding/json"
)
type obj struct {
X interface{}
}
func main() {
var x int
x = 5
o := &obj {
X: x,
}
b, _ := json.Marshal(o)
var newObj obj
json.Unmarshal(b, &newObj)
if _, ok := newObj.X.(int); ok {
fmt.Println("X is an int")
} else if _, ok := newObj.X.(float64); ok {
fmt.Println("X is a float64")
} else {
fmt.Println("This does not make any sense")
}
}
このコードは、「X は float64 です」と出力します。そこでコードを実行できますhttps://play.golang.org/p/9L9unW8l3n