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

Пользователь

от haylie.price , в категории: Общие вопросы , 18 дней назад

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

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp Pocket

1 ответ

Пользователь

от laverna , 17 дней назад

@haylie.price 

В Go нельзя проверить, реализует ли поле структуры определенный интерфейс, так как интерфейсы в Go реализуются неявно.


Однако, можно проверить, реализует ли сама структура определенный интерфейс, используя пустой идентификатор (blank identifier) для преобразования значения типа структуры в значение типа интерфейса.


Пример:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
type MyInterface interface {
    MyMethod()
}

type MyStruct struct {}

func (s MyStruct) MyMethod() {
    fmt.Println("MyMethod called")
}

func main() {
    var s MyStruct

    _, ok := interface{}(s).(MyInterface)
    fmt.Println(ok) // true, MyStruct реализует MyInterface
}


В приведенном примере мы создаем структуру MyStruct и определяем метод MyMethod, который удовлетворяет интерфейсу MyInterface. Затем в функции main мы создаем переменную s типа MyStruct. С помощью пустого идентификатора _ мы преобразуем значение s в интерфейс типа MyInterface. Возвращенное значение используется для проверки ok, который будет true, если значение s реализует интерфейс MyInterface.