Метод 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,
которая возвращает рефлексивный тип значения