Back to questions
Junior — Middle
83
Каким образом можно определить, что конкретный класс или объект реализует определённый интерфейс?
Companies where asked
Digital Spirit
Answer from AI
sobes.tech AI
В Go интерфейсы реализуются неявно: если тип реализует все методы интерфейса, то он автоматически считается реализующим этот интерфейс.
Чтобы проверить, реализует ли конкретный тип интерфейс, можно использовать утверждение типа (type assertion) или попытаться присвоить значение типа переменной интерфейсного типа.
Пример:
package main
import "fmt"
type Reader interface {
Read(p []byte) (n int, err error)
}
type MyReader struct {}
func (r MyReader) Read(p []byte) (n int, err error) {
return 0, nil
}
func main() {
var r Reader
var mr MyReader
// Проверка реализации интерфейса через присвоение
r = mr // если MyReader не реализует Reader, будет ошибка компиляции
// Проверка через утверждение типа
if _, ok := interface{}(mr).(Reader); ok {
fmt.Println("MyReader реализует интерфейс Reader")
} else {
fmt.Println("MyReader не реализует интерфейс Reader")
}
}
Таким образом, компилятор Go гарантирует соответствие интерфейсу, а в рантайме можно проверить с помощью утверждения типа.