29 Свои типы
Как достать конкретный тип из интерфейса?
Ответ
Утверждение типа v, ok := x.(int) проверяет один тип и не паникует, если второй результат принят. type switch перебирает несколько вариантов. В каждой ветке у переменной уже конкретный тип.
Подробнее
Утверждение без ok (v := x.(int)) паникует, если тип другой. В обычном коде бери форму с ok или type switch.
any — это псевдоним interface{} с Go 1.18. Он ничего не обещает, кроме того, что значение можно положить в переменную.
package main
import "fmt"
func describe(v any) {
switch x := v.(type) {
case int:
fmt.Println("целое", x)
case string:
fmt.Println("строка", x)
default:
fmt.Printf("другое %T\n", x)
}
}
func main() {
describe(7)
describe("go")
describe(1.5)
}