Gibt es einen Namen für dieses Idiom, bei dem eine Funktion basierend auf dem Typ der Schnittstelle ausgewählt wird?Gibt es einen Namen für dieses 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()]
}
Kopiert von encoding/json und geringfügig zur Demonstration geändert.
Ich weiß es nicht gehen, aber das scheint mir eine Art von Art der Vererbung. Wenn die Funktion Teil eines ABC statt einer Schnittstelle wäre, würde die Sprache automatisch die richtige Methode basierend auf ihrem Typ auswählen. – Carcigenicate
@Carcigenicate, welche Funktion meinst du? Ich glaube nicht, dass dies in irgendeiner Weise mit der Erbschaft zusammenhängt. Die beteiligten Typen sind völlig unabhängig voneinander. – Sridhar
Nvm, ich glaube, ich habe den Code falsch gelesen. Von der Beschreibung oben und dann dem Code schien es, als ob Sie eine Funktion basierend auf dem Typ eines Objekts senden würden. – Carcigenicate