Maison  >  Article  >  développement back-end  >  Pourquoi un alias de type direct n'hérite-t-il pas des méthodes dans Go ?

Pourquoi un alias de type direct n'hérite-t-il pas des méthodes dans Go ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-19 09:54:03133parcourir

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

Comprendre les alias de type dans Go

Dans Go, les alias de type peuvent prêter à confusion. Le code suivant illustre ceci :

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
}

Pourquoi l'alias direct durWithoutMethods n'hérite-t-il d'aucune méthode, contrairement à durWithMethods ?

Déclarations de type et alias

Pour comprendre cela, nous devons faire la différence entre les déclarations de type et les alias de type. Une déclaration de type crée un nouveau type, supprimant toutes les méthodes de son type sous-jacent. Un alias de type, en revanche, lie simplement un nouvel identifiant à un type existant.

Résolution de la méthode

Dans le cas de durWithMethods, un nouveau type durWithMethods est créé avec dur comme type sous-jacent. Comme dur intègre time.Duration, les méthodes de time.Duration sont promues à dur. Par conséquent, d.String() peut être appelé en utilisant le raccourci d.Duration.String().

Stripping of Methods

Cependant, dans durWithoutMethods, l'alias direct de time.Duration, toutes les méthodes sont supprimées. Puisque Duration.String() est une méthode de time.Duration, elle n'est pas héritée par durWithoutMethods.

True Type Aliases

Un vrai alias de type, d'autre part main, est désigné par le signe = :

type sameAsDuration = time.Duration

Cela crée un alias pour le temps.Durée sans méthodes de décapage. Par conséquent, sad.String() peut être appelé de la même manière que d.String().

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn