Maison >développement back-end >Golang >Les alias de type dans Go héritent-ils des méthodes de leur type sous-jacent ?
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.
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!