Все вопросы

29 Свои типы

Как достать конкретный тип из интерфейса?

Утверждение типа v, ok := x.(int) проверяет один тип и не паникует, если второй результат принят. type switch перебирает несколько вариантов. В каждой ветке у переменной уже конкретный тип.

Утверждение без ok (v := x.(int)) паникует, если тип другой. В обычном коде бери форму с ok или type switch.

any — это псевдоним interface{} с Go 1.18. Он ничего не обещает, кроме того, что значение можно положить в переменную.

Пример

Go

ветки int, string и всё остальное

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)
}