func Aaa(any interface{}) {
switch w := any.(type) {
case int:
return func_111(w)
case string:
return func_222(w)
}
}
Какой тип у w (который свитчом сравнивается с разными типами)? Выглядит как будто у w тип - это некий TYPETYPE, который можно сравнивать со встроенными типами. Но как тогда этот TYPETYPE успешно уходит в функцию func_111, которая ждёт строго int?
Рассмотрим первый case. Он говорит, что w равно int. Это равноценно тому, что написать if w == int
, но это не компилируется.
Я бы ещё понял синтаксис:
func Aaa(any interface{}) {
switch w := typeof(any) {
case int:
return func_111(any) // w - это носитель названия типа, а не само значение. Само значение - any.
case string:
return func_222(any)
}
}
Т.е. исходный switch-case должно быть можно переписать так:
if int == w {
fmt.Printf("%d", w) // INT
} else if string == w {
fmt.Printf("%s", w) // STRING
}
Но такой код не компилируется.