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
Linda HamiltonOriginal
2024-11-19 09:54:03208Durchsuche

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
}

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

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!

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