2018-10-18 encOp 是在哪里实现的呢?

来源: Wechat discuss

encOp 是在哪里实现的呢?

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 就可以查看其实现了。