The type switch in Go is weird and special business. It’s not a generalization of another form that happens to be applied to types.
To my knowledge, you can’t write it using
var (and I do recognize that you only mention the
var form as illustration).
case clause of the switch,
t has the type specified in that case (see @Mue’s answer). Inside the
default clause, it has
im’s original type.
To answer your question, the
t symbol in this case is weird and special, and only meaningful in the context of the switch. Its type is context-dependent. I hesitate to even call it a variable.
I haven’t looked at the compiler but I suspect it deconstructs each
case into a type assertion (cast), the result of which is a local variable within the scope of the
case clause. As a syntactic convenience, you can refer to each using the