我可以像这样将 int 转换为 float64:
var a int = 10
var b float64 = float64(a)
关于类型断言,Effective Go 声明:“类型必须是接口持有的具体类型,或者是值可以转换为的第二个接口类型。”
考虑到这一点,为什么以下失败:
func foo(a interface{}) {
fmt.Println(a.(float64))
}
func main() {
var a int = 10
foo(a)
}
这会导致panic: interface conversion: interface is int, not float64
.
请注意,Go 规范说:
'对于接口类型的表达式 x 和类型 T,主表达式
x.(T)
断言 x 不是 nil 并且存储在 x 中的值是 T 类型。
这确实与 Effective Go 声明相矛盾,但似乎更符合我所看到的。