Как работает type assertion?

Middle
1.3k просмотров
AFK Offer AI

Type assertion извлекает конкретный тип из интерфейса: value := i.(Type).

var i interface{} = "hello"

s := i.(string) // s = "hello" n := i.(int) // panic! тип не совпал

Безопасная форма с двумя значениями:

s, ok := i.(string) // ok = true, s = "hello"
n, ok := i.(int)    // ok = false, n = 0 (zero value)

Для проверки нескольких типов используй type switch:

func describe(i interface{}) string {
    switch v := i.(type) {
    case string:
        return "строка: " + v
    case int:
        return fmt.Sprintf("число: %d", v)
    case nil:
        return "nil"
    default:
        return fmt.Sprintf("неизвестный: %T", v)
    }
}

Type assertion работает только с интерфейсами. Для конкретных типов — используй type conversion: int64(x).

Следующий вопрос

Шардирование vs партиционирование?