Sobes.tech
Назад к вопросам
Junior — Middle
82

Каким образом можно определить, что конкретный класс или объект реализует определённый интерфейс?

Компании, где спрашивали
Digital Spirit

Ответ от нейросети

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 гарантирует соответствие интерфейсу, а в рантайме можно проверить с помощью утверждения типа.