Maison > développement back-end > Golang > Les alias de type dans Go héritent-ils des méthodes de leur type sous-jacent ?

Les alias de type dans Go héritent-ils des méthodes de leur type sous-jacent ?

DDD
Libérer: 2024-11-23 01:30:29
original
682 Les gens l'ont consulté

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

Alias ​​de type et héritage de méthode

Considérez l'extrait de code 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

Ce code montre différentes manières de création d'alias de type et leurs effets sur l'héritage des méthodes.

Type Alias ​​ou définition de type

Dans Go, il existe deux types de déclarations de type : les alias et les définitions.

  • Alias ​​de type : Crée un nouveau nom d'un type existant sans modifier sa structure ou son comportement.
  • Définition du type : Crée un nouveau type avec son propre ensemble de champs et de méthodes.

Héritage de méthode avec alias de type

L'alias de type durWithMethods crée un nouveau type qui hérite des méthodes de son type sous-jacent, dur, qui intègre à son tour time.Duration. Par conséquent, durWithMethods a accès à la méthode String() depuis time.Duration.

fmt.Println(d.String()) // works
Copier après la connexion

En revanche, l'alias de type durWithoutMethods renomme simplement time.Duration. Puisque time.Duration est un type brut, il n’a pas de méthode. Par conséquent, durWithoutMethods n'a pas la méthode String().

fmt.Println(dWM.String()) // doesn't compile
Copier après la connexion

Alias ​​de type avec le même type sous-jacent

Un véritable alias de type, qui renomme simplement un type existant , ressemblerait à ceci :

type sameAsDuration = time.Duration
Copier après la connexion

Dans ce cas, sameAsDuration a les mêmes méthodes que time.Duration car il représente le même type.

var sad sameAsDuration
fmt.Println(sad.String()) // works
Copier après la connexion

Par conséquent, la confusion surgit en raison de la différence subtile entre les alias de type et les définitions de type, et de leur impact sur l'héritage des méthodes. Les alias de type conservent les méthodes de leur type sous-jacent, tandis que les définitions de type créent de nouveaux types avec leur propre ensemble de méthodes.

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal