Maison > développement back-end > Golang > Pourquoi un alias de type hérite-t-il des méthodes d'un type incorporé mais pas d'un type brut ?

Pourquoi un alias de type hérite-t-il des méthodes d'un type incorporé mais pas d'un type brut ?

Barbara Streisand
Libérer: 2024-11-16 09:50:03
original
396 Les gens l'ont consulté

Why does a type alias inherit methods from an embedded type but not from a raw type?

Comprendre l'impact des alias de type sur l'héritage des méthodes

Les alias de type, un aspect courant des langages de programmation comme Go, offrent un moyen pratique de créer de nouveaux identifiants pour les types existants. Cependant, leur comportement en termes d'héritage de méthode peut prêter à confusion.

Considérez le code Go suivant :

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
}
Copier après la connexion

Le code déclare trois types : dur, durWithMethods et durWithoutMethods. Le type dur est une structure intégrant time.Duration. Le type durWithMethods est défini comme un alias pour dur. Tapez durWithoutMethods, en revanche, est un alias pour time.Duration.

La question se pose de savoir pourquoi durWithMethods hérite de la méthode String() de time.Duration alors que durWithoutMethods ne le fait pas.

Déclarations de type et héritage de méthode

En Go, les déclarations de type tombent en deux catégories : les définitions de types et les alias de types.

  • Les définitions de types créent de nouveaux types et suppriment les méthodes héritées.
  • Les alias de types simplement lier un nouvel identifiant à un type existant.

Dans ce cas, dur est une définition de type tandis que les deux durWithMethods et durWithoutMethods sont des alias de type.

Impact sur l'héritage des méthodes

Lorsqu'un nouveau type est créé à l'aide d'une définition de type, comme dur, il perd toutes les méthodes héritées. Cela signifie que dur ne possède pas intrinsèquement la méthode String() de time.Duration. Cependant, lorsqu'un nouveau type est créé à l'aide d'un alias de type, comme durWithMethods, il hérite de toutes les méthodes du type sous-jacent, dans ce cas dur.

Time.Duration et Raw Types

time.Duration est un type brut, ce qui signifie qu'il ne peut pas avoir de méthodes. Cependant, il peut être intégré dans une structure comme dur, ce qui permet à la structure d'hériter de ses méthodes.

Type Alias ​​vs. Direct Alias

durWithoutMethods est un alias direct de temps.Durée. Ce comportement de suppression de type est unique aux alias directs et ne s'applique pas aux alias de type comme durWithMethods.

En conclusion, alors que durWithMethods hérite de la méthode String() de time.Duration car il s'agit d'un alias pour un type qui intègre le temps .Duration, durWithoutMethods n'hérite pas de cette méthode car il s'agit d'un alias direct de type brut.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal