Heim >Backend-Entwicklung >Golang >Warum kann ich in Go keine Methoden für einen benannten Typ aufrufen und wie kann das Einbetten dieses Problem lösen?

Warum kann ich in Go keine Methoden für einen benannten Typ aufrufen und wie kann das Einbetten dieses Problem lösen?

DDD
DDDOriginal
2024-12-14 16:00:19384Durchsuche

Why Can't I Call Methods on a Named Type in Go, and How Can Embedding Solve This?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn