Как в golang проверить реализовывет ли поле структуры определенный интерфейс?
Как в golang проверить реализовывет ли поле структуры определенный интерфейс ? Может можно через reflect? Вот пример, как мне проверить что поле е структуры Test реализовывет интерфейс Exemple?
type Example interface {
String() string
}
type ExampleImpl struct {
}
func (e ExampleImpl) String() string {
return "Exemple"
}
type Test struct {
e ExampleImpl
}
Ответы (2 шт):
Автор решения: Tema K
→ Ссылка
var _ Example = (*ExampleImpl)(nil)
Если кратко, то это типизированный nil, проверяет реализацию интерфейса, самому интерфейсу. Подробности в докладе
Автор решения: aksioto
→ Ссылка
В рантайме можно сделать проверку таким образом:
_, ok = interface{}(ExampleImpl{}).(Example)