reflect.TypeOf(v) — возвращает reflect.Type с полной информацией о типе. fmt.Sprintf("%T", v) — строковое имя типа.
Type switch — самый идиоматичный способ:
switch v := x.(type) {
case int: // ...
case string: // ...
}
reflect.ValueOf(v).Kind() — базовый вид (struct, ptr, slice...). Рефлексия медленная — избегай в горячем коде. Используй type assertion когда знаешь возможные типы, reflect — когда работаешь с произвольными типами (сериализация, ORM).