switch v.(type) { case T: } не работает с type parameter T?Go не позволяет использовать type parameter в case конструкции type switch:
func Process[T any](v T) {
// Не скомпилируется:
// switch v.(type) {
// case T: // ошибка: нельзя использовать type parameter
// }
// Workaround: приведение к any
switch any(v).(type) {
case int:
fmt.Println("int")
case string:
fmt.Println("string")
default:
fmt.Println("other")
}
}
Ограничение осознанное: type parameter известен при инстанциации (компиляции), а type switch работает в рантайме. Смешивание этих механизмов усложнило бы систему типов.
Если нужна разная логика для разных типов, часто лучше использовать интерфейсы с методами вместо generics.