РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
1497 of 1593 menu

Метод reflect.Type.Implements

Метод Implements проверяет, реализует ли тип, представленный объектом reflect.Type, переданный интерфейс. В качестве единственного параметра метод принимает объект reflect.Type, представляющий интерфейсный тип. Метод возвращает true, если тип реализует все методы интерфейса, и false в противном случае.

Синтаксис

t.Implements(interfaceType)

Пример

Давайте проверим, реализует ли структура MyStruct интерфейс fmt.Stringer:

package main import ( "fmt" "reflect" ) type MyStruct struct { Value int } func (m MyStruct) String() string { return fmt.Sprintf("MyStruct: %d", m.Value) } func main() { var s MyStruct t := reflect.TypeOf(s) var stringer fmt.Stringer interfaceType := reflect.TypeOf(&stringer).Elem() res := t.Implements(interfaceType) fmt.Println(res) }

Результат выполнения кода:

true

Так как структура MyStruct имеет метод String, который соответствует сигнатуре метода интерфейса fmt.Stringer, результатом будет true.

Пример

Давайте проверим, реализует ли структура MyStruct интерфейс error:

package main import ( "fmt" "reflect" ) type MyStruct struct { Value int } func (m MyStruct) String() string { return fmt.Sprintf("MyStruct: %d", m.Value) } func main() { var s MyStruct t := reflect.TypeOf(s) var err error interfaceType := reflect.TypeOf(&err).Elem() res := t.Implements(interfaceType) fmt.Println(res) }

Результат выполнения кода:

false

Структура MyStruct не реализует интерфейс error, так как не имеет метода Error. Результатом будет false.

Пример

Давайте проверим, реализует ли тип int интерфейс fmt.Stringer:

package main import ( "fmt" "reflect" ) func main() { var num int t := reflect.TypeOf(num) var stringer fmt.Stringer interfaceType := reflect.TypeOf(&stringer).Elem() res := t.Implements(interfaceType) fmt.Println(res) }

Результат выполнения кода:

false

Встроенный тип int не реализует интерфейс fmt.Stringer, поэтому результат будет false.

Смотрите также

  • метод reflect.Type,
    который представляет тип в рефлексии
  • метод reflect.Type.AssignableTo,
    который проверяет возможность присваивания типу
  • метод reflect.Type.ConvertibleTo,
    который проверяет возможность преобразования типу
  • функцию reflect.TypeOf,
    которая возвращает рефлексивный тип значения
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить