Как проверить что структура реализует интерфейс?

Middle
624 просмотров
AFK Offer AI

Два способа:

Compile-time проверка (рекомендуемый):

var _ MyInterface = (*MyStruct)(nil)
var _ MyInterface = MyStruct{} // если методы на value receiver
Если структура не реализует интерфейс — ошибка компиляции.

Runtime проверка через type assertion:

var x interface{} = MyStruct{}
if v, ok := x.(MyInterface); ok {
    v.DoSomething()
}

Или через reflect:

typ := reflect.TypeOf((*MyInterface)(nil)).Elem()
reflect.TypeOf(MyStruct{}).Implements(typ)

Compile-time проверка предпочтительнее — ловит ошибки раньше и не имеет runtime-оверхеда.

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

Что такое event-driven architecture?