Golang 中国

zero

Golang China 第 1043 号会员,加入于 2014-01-28 10:47


zero最近回复了


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

上面错了,不能区分。。。有没有真正的解决办法?

回复了 zero 创建的主题: 怎么知道结构体实现了基类的方法,通过reflect或者runtime 2017-11-10 11:36
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())
}
回复了 zero 创建的主题: 怎么知道结构体实现了基类的方法,通过reflect或者runtime 2017-11-10 11:31
println(reflect.ValueOf(e.Echo).Pointer())
    println(reflect.ValueOf((&BaseA{}).Echo).Pointer())

这两个地址不一样,解决了,有没有更好的办法?

回复了 zero 创建的主题: 怎么知道结构体实现了基类的方法,通过reflect或者runtime 2017-11-10 11:20
println(reflect.ValueOf(e).MethodByName("Echo").Pointer())
    println(reflect.ValueOf(&BaseA{}).MethodByName("Echo").Pointer())

打印出来的地址具然是一样的 。

回复了 zero 创建的主题: 用golang做web和rest服务器,angularjs做前端,重构了下站,感觉很爽,这可能是未来网站架构的发展趋势 2014-02-17 11:23

我用的架构,与数据库的交互,有严格的权限验证,angujarjs里的ajax只有rpc的函数名与参数,也是跟REST端函数参数严格绑定了的,参数注入啥的都不可能发生,目前来说,算是很安全的了

zero 创建的更多回复