Как различить значения рун и 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