はじめに
先日、Go 1.24で追加予定のgeneric alias typesの記事がGoの公式Blogに投稿されました。
https://go.dev/blog/alias-names
type definition
新しい型を定義する。
intとは別の全く新しい型として定義しているので、int型をFoo型に代入することはできない。
型エイリアス
go1.9で追加された機能。
あくまでFooはint型のエイリアスなので、int型と同じ。新しい型を定義しているわけではない。ゆえに、Fooにint型を代入することができる。
例えば以下のようなパッケージがあるとする。
このパッケージを新しいパッケージに移動したい場合 以下のようにする
newpkg.User と oldpkg.User は同じ型になる。
Generic Type Aliases
Go1.18でジェネリクスが導入されたが、エイリアスでジェネリクスを使用することはできなかった。Generic Type Aliases によって以下のようなジェネリクスを含むエイリアスがサポートされる。
次に、Fooがgeneric型の場合を考える。
これを同じように新しい型として移行できる。
パッケージ間でジェネリック型を移動するときに完全な型の互換性を維持できます。
終わりに
この機能は、Go 1.23 では、GOEXPERIMENT=aliastypeparams
フラグを指定することで使用することができる。Go 1.24からはデフォルトで使用可能となる予定である。