content/discuss/2018-10-18-encOp.md
来源: Wechat discuss
encode.go文件中的这行代码是对数据进行编码么,具体怎么实现的,在哪里知道么? instr.op(instr, state, reflect.Value{})
func (enc *Encoder) encode(b *encBuffer, value reflect.Value, ut *userTypeInfo) {
defer catchError(&enc.err)
engine := getEncEngine(ut, nil)
...
}
点击进入 getEncEngine -> buildEncEngine -> compileEnc -> encOpFor
func encOpFor(rt reflect.Type, inProgress map[reflect.Type]*encOp, building map[*typeInfo]bool) (*encOp, int) {
...
var op encOp
if int(k) < len(encOpTable) {
op = encOpTable[k]
}
...
}
...
var encOpTable = [...]encOp{
reflect.Bool: encBool,
reflect.Int: encInt,
reflect.Int8: encInt,
reflect.Int16: encInt,
reflect.Int32: encInt,
reflect.Int64: encInt,
reflect.Uint: encUint,
reflect.Uint8: encUint,
reflect.Uint16: encUint,
reflect.Uint32: encUint,
reflect.Uint64: encUint,
reflect.Uintptr: encUint,
reflect.Float32: encFloat,
reflect.Float64: encFloat,
reflect.Complex64: encComplex,
reflect.Complex128: encComplex,
reflect.String: encString,
}
点击每个 value 就可以查看其实现了。