zero

第 1043 号会员 /

回复了 zero 创建的主题: 怎么知道结构体实现了基类的方法,通过reflect或者runtime

func main() {
    var e IT = &StructS{}
    var f IT = &StructS{}

    b := &BaseA{}
    c := &BaseA{}

    println("GOOD")
    // 直接reflect函数可以区分
    println(reflect.ValueOf(e.Echo).Pointer())
    println(reflect.ValueOf(f.Echo).Pointer())
    println(reflect.ValueOf(b.Echo).Pointer())
    println(reflect.ValueOf(c.Echo).Pointer())

    println("WTF")
    // 但通过MethodByName不行
    println(reflect.ValueOf(e).MethodByName("Echo").Pointer())
    println(reflect.ValueOf(f).MethodByName("Echo").Pointer())
    println(reflect.ValueOf(b).MethodByName("Echo").Pointer())
    println(reflect.ValueOf(c).MethodByName("Echo").Pointer())
}