Golang 反射问题,从接口反射方法

查看 56|回复 1
作者:Qjues   
package main
import (
        "fmt"
        "reflect"
)
type Interface interface {
        Interface(arg int) string
}
type Struct struct {
}
func (s Struct) Interface(arg int) string {
        //TODO implement me
        panic("implement me")
}
func main() {
        of := reflect.TypeOf(Struct{})
        m1, _ := of.MethodByName("Interface")
        fmt.Println(m1.Type.NumIn()) // output 2 -> in[0] is Struct
        fmt.Println(m1.Type.In(0))
        m2, _ := reflect.TypeOf((*Interface)(nil)).Elem().MethodByName("Interface")
        fmt.Println(m2.Type.NumIn()) // output 1 -> in[0] is int
        fmt.Println(m2.Type.In(0))
        m3 := reflect.ValueOf(Interface.Interface)
        fmt.Println(m3.Type().NumIn()) // output 2 -> in[0] is Interface
        fmt.Println(m3.Type().In(0))
}
想实现接口方法的分析,每个方法的入参第一个应该是接口本身。
通过第一种方案反射出来的方法,入参有 2 个,但是第一个参数是结构体,和接口无关了
通过第二种方案反射出来的方法,入参只有 1 个,缺少接口本身
通过第三种方案反射出来的方法,结果符合预期,但是需要每个方法都硬编码。

interface, type, fmt, println

Qjues
OP
  
有没有什么其他的方案呢,通过接口可以分析出每个方法的完整类型。
您需要登录后才可以回帖 登录 | 立即注册

返回顶部