Wann unterscheiden sich Typaliase und Typdefinitionen in Go in der Methodenvererbung?

Linda Hamilton
Freigeben: 2024-11-19 18:51:03
Original
433 Leute haben es durchsucht

When Do Type Aliases and Type Definitions in Go Differ in Method Inheritance?

Typaliase vs. Typdefinitionen

In Go können Typdeklarationen in zwei Kategorien eingeteilt werden: Aliasdeklarationen und Typdefinitionen. Das Verständnis dieser Unterscheidung ist entscheidend, um das merkwürdige Verhalten von Typaliasen wie durWithoutMethods und sameAsDuration zu verstehen.

Alias-Deklarationen

Alias-Deklarationen erstellen lediglich einen neuen Bezeichner für einen vorhandenen Typ. Dieser neue Bezeichner ist mit dem ursprünglichen Namen austauschbar. Geben Sie beispielsweise dur = time.Duration ein, um einen Alias ​​für time.Duration zu erstellen. Die Verwendung von dur und time.Duration zum Deklarieren von Variablen führt zu identischem Verhalten.

Typdefinitionen

Im Gegensatz dazu erstellen Typdefinitionen neue Typen. Sie entfernen alle Methoden vom zugrunde liegenden Typ. Das bedeutet, dass, wenn Sie einen Typtyp x struct { y time.Duration } definieren, x keine Methoden von time.Duration erbt. Dies liegt daran, dass time.Duration ein Rohtyp ist, ein Typ ohne angehängte Methoden.

Anwenden auf die Beispiele

  • durWithMethods dur: Diese Alias-Deklaration erstellt einen neuen Typ durWithMethods, dessen zugrunde liegender Typ dur ist. Da dur time.Duration einbettet, erben dur und durWithMethods Duration.String().
  • durWithoutMethods time.Duration: Diese Typdefinition erstellt einen neuen Typ durWithoutMethods, der von time.Duration getrennt ist. Daher erbt durWithoutMethods Duration.String() nicht.
  • type sameAsDuration = time.Duration: Diese Typalias-Deklaration gibt an, dass sameAsDuration und time.Duration vom gleichen Typ sind. Daher verfügt sameAsDuration auch über die String()-Methode.

Das obige ist der detaillierte Inhalt vonWann unterscheiden sich Typaliase und Typdefinitionen in Go in der Methodenvererbung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage