Heim > Backend-Entwicklung > Golang > Warum erbt ein direkter Typ-Alias ​​keine Methoden in Go?

Warum erbt ein direkter Typ-Alias ​​keine Methoden in Go?

Linda Hamilton
Freigeben: 2024-11-19 09:54:03
Original
205 Leute haben es durchsucht

Why Doesn't a Direct Type Alias Inherit Methods in Go?

Typaliase in Go verstehen

Typaliase in Go können verwirrend sein. Der folgende Code veranschaulicht dies:

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

Warum erbt der direkte Alias ​​durWithoutMethods im Gegensatz zu durWithMethods keine Methoden?

Typdeklarationen und Aliase

Um dies zu verstehen, müssen wir zwischen Typdeklarationen und Typaliasen unterscheiden. Eine Typdeklaration erstellt einen neuen Typ und entfernt alle Methoden vom zugrunde liegenden Typ. Ein Typalias hingegen bindet einfach einen neuen Bezeichner an einen vorhandenen Typ.

Methodenauflösung

Im Fall von durWithMethods ist ein neuer Typ durWithMethods erstellt mit dur als zugrunde liegendem Typ. Da du time.Duration einbettet, werden Methoden von time.Duration zu dur heraufgestuft. Daher kann d.String() mit der Abkürzung d.Duration.String() aufgerufen werden.

Methodenentfernung

In durWithoutMethods jedoch der direkte Alias von time.Duration werden alle Methoden entfernt. Da Duration.String() eine Methode von time.Duration ist, wird sie nicht von durWithoutMethods geerbt.

True-Type-Aliase

Ein True-Type-Alias ​​hingegen Andererseits wird mit dem =-Zeichen gekennzeichnet:

type sameAsDuration = time.Duration
Nach dem Login kopieren

Dadurch wird ein Alias ​​für erstellt time.Dauer ohne Stripping-Methoden. Daher kann sad.String() ähnlich wie d.String() aufgerufen werden.

Das obige ist der detaillierte Inhalt vonWarum erbt ein direkter Typ-Alias ​​keine Methoden in Go?. 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