使用两种不同(但相同)类型时,类型断言失败

时间:2015-08-10 23:34:44

标签: go type-assertion

我有这段代码

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相同。如果不使用相同的类型,有没有办法做到这一点?

1 个答案:

答案 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

如果您想阅读有关界面和类型以及所有有趣内容的内容,这些内容都非常有用:

http://blog.golang.org/laws-of-reflection

http://research.swtch.com/interfaces