Examen de la différence entre Type Alias et Named Type (Golang)

Examen de la différence entre Type Alias et Named Type (Golang)

13 octobre 2023

Les deux sont des méthodes pour redéfinir un type existant lors de la définition d’un type, et la méthode de définition est comme suit.

type MyStruct struct {
    Name string
    Age int
}

func(m MyStruct) Print(){
    fmt.Println(m.Name, m.Age)
}

type MyStructNamed MyStruct // Named Type
type MyStructAlias = MyStruct // Type Alias

Alias de Type

Dans le cas d’un type alias, comme il attribue un alias à un type existant, il possède les mêmes méthodes que le type original.

package main

func main() {
    var m MyStructAlias
    m.Name = "GiraffeWithCode"
    m.Age = 27
    m.Print()
    // GiraffeWithCode 27
}

Type Nommé

Dans le cas du Type Nommé, il ne possède pas les mêmes méthodes que le type original.

package main

func main() {
    var m MyStructNamed
    m.Name = "GiraffeWithCode"
    m.Age = 27
    m.Print() // Erreur
    // ./main.go:18:3: m.Print undefined (type MyStructNamed has no field or method Print)
}

Par conséquent, un casting explicite de type est nécessaire.

package main

func main() {
    var m MyStructNamed
    m.Name = "GiraffeWithCode"
    m.Age = 27
    m.(MyStruct).Print()
    // GiraffeWithCode 27
}

Quand l’utiliser ?

  • Si vous souhaitez définir un nouveau type et clarifier les relations entre les types, il est préférable d’utiliser le Type Nommé,
  • Si vous souhaitez attribuer un autre nom à un type existant pour améliorer la lisibilité du code, vous pouvez utiliser l’Alias de Type.