我想通過反射來確定 Go 接口是否包含某些方法簽名。我之前通過reflect結構上的 ion動態獲得了名稱和簽名。這是一個簡化的示例:package mainimport "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}http://play.golang.org/p/Uaidml8KMV。謝謝你的幫助!
1 回答

智慧大石
TA貢獻1946條經驗 獲得超3個贊
您可以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))
- 1 回答
- 0 關注
- 201 瀏覽
添加回答
舉報
0/150
提交
取消