Sobes.tech
Junior

Как да проверите типа на интерфейса в Go?

sobes.tech AI

Отговор от AI

В Go често се използват type assertion или type switch за проверка на типа на интерфейс.

Ако имате променлива от тип интерфейс, например var i interface{}, и искате да проверите дали тя реализира конкретен интерфейс или е от конкретен тип, можете да направите така:

if v, ok := i.(MyInterface); ok {
    // i реализира MyInterface, v е преобразуваният тип
}

За проверка на няколко типа е удобно да използвате type switch:

switch v := i.(type) {
case MyInterface:
    // i реализира MyInterface
case *MyStruct:
    // i е указател към MyStruct
default:
    // друг тип
}

Ако искате да проверите типа по-динамично, можете да използвате пакета reflect:

import "reflect"

t := reflect.TypeOf(i)
if t.Implements(reflect.TypeOf((*MyInterface)(nil)).Elem()) {
    // i реализира MyInterface
}

По този начин, за прости случаи, достатъчни са type assertion или type switch; за по-сложни случаи, се използва reflection.