Erben Typaliase in Go Methoden von ihrem zugrunde liegenden Typ?

DDD
Freigeben: 2024-11-23 01:30:29
Original
604 Leute haben es durchsucht

Do Type Aliases in Go Inherit Methods from Their Underlying Type?

Typaliase und Methodenvererbung

Betrachten Sie den folgenden Codeausschnitt:

package main

import (
    "fmt"
    "time"
)

type dur struct {
    time.Duration
}

type durWithMethods dur

type durWithoutMethods time.Duration

func main() {
    var d durWithMethods // works ??
    fmt.Println(d.String())
    
    var dWM durWithoutMethods
    fmt.Println(dWM.String()) // doesn't compile
}
Nach dem Login kopieren

Dieser Code zeigt verschiedene Möglichkeiten von Erstellen von Typaliasen und deren Auswirkungen auf die Methode Vererbung.

Typalias vs. Typdefinition

In Go gibt es zwei Arten von Typdeklarationen: Aliase und Definitionen.

  • Typalias: Erstellt einen neuen Namen für einen vorhandenen Typ, ohne dessen Struktur zu ändern oder Verhalten.
  • Typdefinition: Erstellt einen neuen Typ mit einem eigenen Satz von Feldern und Methoden.

Methodenvererbung mit Typaliasen

Der Typalias durWithMethods erstellt einen neuen Typ, der Methoden von seinem zugrunde liegenden Typ erbt. dur, was wiederum time.Duration einbettet. Daher hat durWithMethods Zugriff auf die String()-Methode von time.Duration.

fmt.Println(d.String()) // works
Nach dem Login kopieren

Im Gegensatz dazu benennt der Typalias durWithoutMethods einfach time.Duration um. Da time.Duration ein Rohtyp ist, verfügt er über keine Methoden. Daher verfügt durWithoutMethods nicht über die String()-Methode.

fmt.Println(dWM.String()) // doesn't compile
Nach dem Login kopieren

Typaliase mit demselben zugrunde liegenden Typ

Ein echter Typalias, der einfach einen vorhandenen Typ umbenennt , würde so aussehen:

type sameAsDuration = time.Duration
Nach dem Login kopieren

In diesem Fall hat sameAsDuration die gleichen Methoden wie time.Duration, weil es denselben Typ darstellt.

var sad sameAsDuration
fmt.Println(sad.String()) // works
Nach dem Login kopieren

Daher entsteht Verwirrung aufgrund des subtilen Unterschieds zwischen Typaliasen und Typdefinitionen und deren Auswirkungen auf die Methodenvererbung. Typaliase behalten die Methoden ihres zugrunde liegenden Typs bei, während Typdefinitionen neue Typen mit ihrem eigenen Satz von Methoden erstellen.

Das obige ist der detaillierte Inhalt vonErben Typaliase in Go Methoden von ihrem zugrunde liegenden Typ?. 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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage