Как различить значения рун и int32 в переключателе типов?

Имея следующий код

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 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 ответ

Решение

Это псевдоним для int32, очевидно, вы не можете их различить. Если вам действительно нужно, определите свой собственный тип, чтобы обернуть один из них, и вам стоит это сделать, зачем вам это нужно?

Нет, вы не можете их дифференцировать. rune - это псевдоним для int32, а byte - псевдоним для uint8.

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

Другие вопросы по тегам