Ответ
В Go можно проверять типы с помощью type assertion и type switch.
Type assertion позволяет получить конкретный тип из интерфейса:
var val interface{} = "hello"
str, ok := val.(string) // ok == true, str == "hello"
Type switch удобен для множественных проверок:
switch v := val.(type) {
case string:
fmt.Println("string:", v)
case int:
fmt.Println("int:", v)
default:
fmt.Println("unknown type")
}
Оба способа работают только с интерфейсами. Для проверки типов структур можно использовать рефлексию (reflect), но это менее эффективно.