Type switch — конструкция для определения динамического типа интерфейсной переменной. Удобнее цепочки type assertion-ов.
func describe(i interface{}) {
switch v := i.(type) {
case int:
fmt.Printf("int: %d\n", v)
case string:
fmt.Printf("string: %s\n", v)
case bool:
fmt.Printf("bool: %t\n", v)
default:
fmt.Printf("unknown: %T\n", v)
}
}
В отличие от обычного switch, v в каждом case имеет конкретный тип — не нужно дополнительное приведение. Часто используется в обработке ошибок (errors.As — альтернатива) и при работе с any/interface{}.