反射
反射可以提高程序的灵活性,使得 interface() 有更大的发挥余地,反射使用 TypeOf 和 ValueOf 函数从接口中获取目标对象信息,将匿名字段作为独立字段。
修改对象状态的前提是 interface.data 是 settable , 即 pointer-interface
通过反射可以动态调用方法
例子
1 | type User struct { |
输出
1 | Type: User |
如果传递是地址
1 | - Info(u) |
输出
1 | panic: reflect: NumField of non-struct type *main.User |
加入判断
1 | func Info(o interface{}) { |
匿名
1 | type User struct { |
取匿名属性中的字段
1 | func main() { |
settable
1 | x := 123 |
通过反射修改属性值
1 | func Set(o interface{}) { |
输出
1 | {1 OK 12} |
判断是否有该属性
1 | if !f.IsValid() { |
反射调用方法
1 | func (u User) HelloSomeone(name string) { |