@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.