Reflection 如何检查接口是否指定了使用反射的方法

Reflection 如何检查接口是否指定了使用反射的方法,reflection,go,Reflection,Go,我想反省一下,以确定Go接口是否包含某些方法签名。我已经动态地获得了名称和签名,以前是通过结构上的reflection获得的。下面是一个简化的示例: package main import "reflect" func main() { type Mover interface { TurnLeft() bool // TurnRight is missing. } // How would I check whether TurnR

我想反省一下,以确定Go接口是否包含某些方法签名。我已经动态地获得了名称和签名,以前是通过结构上的
reflect
ion获得的。下面是一个简化的示例:

package main

import "reflect"

func main() {
    type Mover interface {
        TurnLeft() bool
        // TurnRight is missing.
    }

    // How would I check whether TurnRight() bool is specified in Mover?
    reflect.TypeOf(Mover).MethodByName("TurnRight") // would suffice, but
    // fails because you can't instantiate an interface
}

。谢谢你的帮助

您可以使用以下技巧为类型创建一个
reflect.Type

tp := reflect.TypeOf((*Mover)(nil)).Elem()
也就是说,创建一个类型化的nil指针,然后获取它所指向的类型

确定
reflect.Type
是否实现特定方法签名的一种简单方法是使用其
implements
方法和适当的接口类型。这样做应该可以:

type TurnRighter interface {
    TurnRight() bool
}
TurnRighterType := reflect.TypeOf((*TurnRighter)(nil)).Elem()
fmt.Println(tp.Implements(TurnRighterType))

谢谢,这很狡猾。