Type AliasとNamed Typeの違いについて学ぶ (Golang)

Type AliasとNamed Typeの違いについて学ぶ (Golang)

2023年10月13日

どちらもタイプ定義時に既存のタイプを再定義する方法であり、定義方法は以下のように定義します。

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

Type Alias

type aliasの場合、既存のタイプに別名を指定する方式なので、既存タイプと同じメソッドを持っています。

package main

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

Named Type

Named Typeの場合、既存タイプと同じメソッドを持っていません。

package main

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

したがって、明示的なタイプキャスティングが必要です。

package main

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

いつ使うべきか?

  • 新しいタイプを定義し、タイプ間の関係を明確にしたい場合はNamed Typeを使用するのが良いです。
  • 既存タイプに異なる名前をつけ、コードの可読性を向上させたい場合はType Aliasを使用できます。