Type assertion извлекает конкретный тип из интерфейса: value := i.(Type).
var i interface{} = "hello"
s := i.(string) // s = "hello"
n := i.(int) // panic! тип не совпал
Безопасная форма с двумя значениями:
s, ok := i.(string) // ok = true, s = "hello"
n, ok := i.(int) // ok = false, n = 0 (zero value)
Для проверки нескольких типов используй type switch:
func describe(i interface{}) string {
switch v := i.(type) {
case string:
return "строка: " + v
case int:
return fmt.Sprintf("число: %d", v)
case nil:
return "nil"
default:
return fmt.Sprintf("неизвестный: %T", v)
}
}
Type assertion работает только с интерфейсами. Для конкретных типов — используй type conversion: int64(x).