Aufrufen von Methoden für benannte Typen
In Go sind benannte Typen neue Datentypen, die aus vorhandenen erstellt werden. Dies kann nützlich sein, um benutzerdefinierte Methoden zum zugrunde liegenden Typ hinzuzufügen, beispielsweise beim Unmarshalling von JSON-Daten. Wenn der benannte Typ jedoch auf die unten gezeigte Weise erstellt wird, verliert er die Fähigkeit, Methoden des zugrunde liegenden Typs aufzurufen:
type StartTime time.Time
Zum Beispiel führt der Versuch, die Date()-Methode für myStartTime aufzurufen, zu ein Fehler: myStartTime.Date undefiniert (Typ my_package.StartTime hat kein Feld oder Methodendatum).
Lösung: Umarmen Einbettungen
Um dieses Problem zu beheben und die ursprünglichen Methoden des zugrunde liegenden Typs beizubehalten, kann man die Einbettung nutzen. Durch die Einbettung des zugrunde liegenden Typs erbt der benannte Typ alle seine Methoden und Felder. Dieser Prozess wird unten demonstriert:
type StartTime struct { time.Time }
In diesem Szenario werden alle Methoden und Felder von time.Time „befördert“ und über den genannten Typ zugänglich gemacht. Folglich löst der Aufruf von Date() für s, eine Variable vom Typ StartTime, keinen Fehler mehr aus.
Beispiel-Showcase:
type StartTime struct { time.Time } func main() { s := StartTime{time.Now()} fmt.Println(s.Date()) }
Dieser Code ergibt Folgendes Ausgabe:
2009 November 10
Durch den Einsatz der Einbettung können Sie die Fähigkeiten vorhandener Typen mühelos erweitern und gleichzeitig ihr Original beibehalten Funktionalität.
Das obige ist der detaillierte Inhalt vonWarum kann ich in Go keine Methoden für einen benannten Typ aufrufen und wie kann das Einbetten dieses Problem lösen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!