如何区分类型切换中的符文和int32值?

时间:2017-03-14 18:51:33

标签: go int32 rune type-switch

拥有以下代码

var v interface{}
v = rune(1)

switch v.(type) {
    case int32:
        fmt.Println("int32")
    case rune:
        fmt.Println("rune")
}

我收到编译错误

tmp/sandbox193184648/main.go:14: duplicate case rune in type switch
    previous case at tmp/sandbox193184648/main.go:12

如果我用我自己的类型换行符文,那么type-switch会编译并运行

type myrune rune

var v interface{}
v = myrune(1)

switch v.(type) {
case int32:
    fmt.Println("int32")
case myrune:
    fmt.Println("rune")
}

请参阅https://play.golang.org/p/2lMRlpCLzX

为什么?如何区分类型开关中的符文和int32?

1 个答案:

答案 0 :(得分:5)

它是int32的别名,显然你无法区分它们。如果你真的需要,定义你自己的类型来包装其中一个将是要走的路,为什么你需要这样做?

  

不,你不能区分它们。 rune是int32和byte的别名   是uint8的别名。

https://groups.google.com/forum/m/#!searchin/golang-nuts/Rune/golang-nuts/jbWUrsQ-Uws