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
DDDoriginal
2024-11-23 01:30:29673parcourir

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
}

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

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

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

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

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!

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