反射的例子
来源:18-1 分布式系统简介

chore
2018-06-23
这个是源码,request 刚被定义,怎么就被decode调用了呢?
写回答
1回答
-
ccmouse
2018-06-23
刚定义,但是它是一个结构体。所以还是分配了内存赋了初值。接下来传递它的地址进去decode,decode函数于是填写这个结构的各个字段。这部分和反射没啥关系,如果我写一个函数叫做decodeNewBlockData(data *newBlockData),然后一个个字段填进去,一样能够达到这个效果。
反射体现在它是一个decode函数,参数是interface{},它怎么知道参数里面有Block,ReceiveAt等等这些字段呢?它不能直接说data.Block=...,因为这时它的参数是interface{}。这是go这种静态语言和python,js等的很大区别。所以它只能通过反射找到名字叫Block的字段,然后再给它赋值。
我建议同学使用调试器单步跟进去看一下具体的操作方法。需要一些耐心但是可以学的到。032018-06-28
相似问题