我有这段代码
package main
import "fmt"
type MyType int
func main() {
var i interface{} = 12
f := i.(MyType)
fmt.Println(f)
}
然而,我收到此错误:
panic: interface conversion: interface is int, not main.MyType
但是,在这种情况下,int与MyType相同。如果不使用相同的类型,有没有办法做到这一点?
答案 0 :(得分:3)
他们不是同一类型。正如运行时告诉您的那样,一个是int
,一个是MyType
。 Go有一个非常具体的定义。
直接来自规范:
类型声明将标识符(类型名称)绑定到新类型 与现有类型和操作具有相同的基础类型 为现有类型定义的也是为新类型定义的。该 新类型与现有类型不同。
https://golang.org/ref/spec#Type_identity
https://golang.org/ref/spec#Type_declarations
https://golang.org/ref/spec#Types
您可以轻松地在两者之间进行转换,MyType(12)
工作正常,但类型断言与转换不同:https://golang.org/ref/spec#Type_assertions
如果您想阅读有关界面和类型以及所有有趣内容的内容,这些内容都非常有用: