这个成语有名字吗?
Is there a name for this idiom?
有没有根据接口类型选择函数的成语名称?
type encoderFunc func(e *encodeState, v reflect.Value, opts encOpts)
var encoderCache struct {
m map[reflect.Type]encoderFunc
}
func (e *encodeState) marshal(v interface{}, opts encOpts) (err error) {
v := refect.ValueOf(v)
valueEncoder(v)(e, v, opts)
return nil
}
func valueEncoder(v reflect.Value) encoderFunc {
return encoderCache.m[v.Type()]
}
从 encoding/json 复制并稍作改动以供演示。
我称之为 动态方法分派 。或多或少与 Go 接口实现中使用的机制相同,其中 map[reflect.Type]encoderFunc
调用 i-table。甚至可以只用接口重写编组,除了我们不能为内置类型编写方法。
type encodable interface{
encode(e *encodeState, opts encOpts)
}
func (st SomeType) encode(e *encodeState, opts encOpts){
...
}
...
func (ot OtherType) encode(e *encodeState, opts encOpts){
...
}
func (e *encodeState) marshal(v encodable, opts encOpts) (err error) {
v.encode(e, opts)
return nil
}
有没有根据接口类型选择函数的成语名称?
type encoderFunc func(e *encodeState, v reflect.Value, opts encOpts)
var encoderCache struct {
m map[reflect.Type]encoderFunc
}
func (e *encodeState) marshal(v interface{}, opts encOpts) (err error) {
v := refect.ValueOf(v)
valueEncoder(v)(e, v, opts)
return nil
}
func valueEncoder(v reflect.Value) encoderFunc {
return encoderCache.m[v.Type()]
}
从 encoding/json 复制并稍作改动以供演示。
我称之为 动态方法分派 。或多或少与 Go 接口实现中使用的机制相同,其中 map[reflect.Type]encoderFunc
调用 i-table。甚至可以只用接口重写编组,除了我们不能为内置类型编写方法。
type encodable interface{
encode(e *encodeState, opts encOpts)
}
func (st SomeType) encode(e *encodeState, opts encOpts){
...
}
...
func (ot OtherType) encode(e *encodeState, opts encOpts){
...
}
func (e *encodeState) marshal(v encodable, opts encOpts) (err error) {
v.encode(e, opts)
return nil
}