golang 理解 reflect包 函数 ValueOf, Value.Set
最近golang 项目需要一个通用函数,更新结构体中的数据。查看资料需要用到反射机制,之前对反射机制理解不深,费了些周折,终于有所理解,记录于此,供自己和大家参考。 理解interface{}变量 理解reflect 机制很重要一点,本人觉得关键需要理解把一个变量传给下面例子函数的interface{}参数后,interface{}获取了变量的哪些信息。 func reload(i interface{}) { } 通过reflect的 unpackEface 函数可以推测变量传给interface{}参数后,会把参数信息存储到emptyInterface结构体中 func unpackEface(i interface{}) Value { e := (*emptyInterface)(unsafe.Pointer(&i)) // NOTE: don't read e.word until we know whether it is really a pointer or not. t := e.typ if t == nil { return Value{} } f := flag(t.Kind()) if ifaceIndir(t) { f |= flagIndir } return Value{t, e.word, f} }