Ich glaube, was Sie versuchen, am Ende zu erreichen, ist so etwas wie die "Template-Methode" Entwurfsmuster:
In Software-Engineering, die Das Vorlagenmethodenmuster ist ein Verhaltensmuster , das das Programmskelett eines Algorithmus in einer -Methode definiert, die Vorlagenmethode genannt wird, die einige Schritte zu Unterklassen verschiebt.
https://en.wikipedia.org/wiki/Template_method_pattern
AFAIK, der einzig richtige Weg, so etwas wie dies in Go zu erreichen, ist Schnittstellen wie @ pie-o-pah zu verwenden und @icza gesagt hat. Ich sage "etwas Ähnliches", weil Sie Methoden mit Schnittstellen nicht als Empfänger definieren können (d. H. Es gibt keinen teilweise abstrakten Typ in Go).
Eine korrekte Implementierung würde wie folgt aussehen:
package main
import "fmt"
// --------------------------
// define your purely abstract type as an interface
type MyParent interface {
doSomething() string
}
// define a function (your template method) which operates
// on that interface; an interface cannot be a function receiver,
// but it can always be a parameter
func internal(m MyParent) string {
return m.doSomething()
}
// define the implementation
type MyChild struct {}
// implement the methods for the interface
func (m *MyChild) doSomething() string {
return "Test"
}
// in Go any type which implements all methods in a given interface
// implements that interface implicitly, but you can "force" the
// compiler to check that for you using the following trick
// (basically try to assign a an instance of the interface to a variable,
// then discard it)
var _ MyParent = (*MyChild)(nil)
// -------------------------------
// test code
func main() {
m := &MyChild{}
fmt.Println(m.doSomething())
fmt.Println(internal(m))
}
Es gibt keine Vererbung in Go ist. Einige verwandte/mögliche Duplikate: [1] (http://stackoverflow.com/questions/21251242/is-it-possible-to-call-overridden-method-from-parent-struct-in-golang), [zwei] (http://stackoverflow.com/questions/30622605/can-embedded-struct-method-have-knowledge-of-parent-child), [drei] (http://stackoverflow.com/questions/29390736/go embedded-struct-call-child-method-stattdessen-Eltern-Methode), [vier] (http://stackoverflow.com/questions/29144622/what-is-the-idiomatic-way-in-go-to-create -a-complex-Hierarchy-of-structs) – icza
Die Frage, womit man es ersetzen soll? – co11ter
Bitte lesen Sie alle verknüpften Fragen + Antworten, sie sollten Ihnen einige Ideen geben. – icza