Dev Study
Go コース

58. ジェネリックな型 — 型安全なスタック

型にも型パラメータを持たせられます。type Stack[T any] struct { items []T } のように書くと、要素型をあとから決められる汎用コンテナになります。Stack[int] と Stack[string] は別々の型として扱われ、それぞれ型チェックが効きます。

メソッドのレシーバには、型を宣言したときと同じ型パラメータを書きます(func (s *Stack[T]) Push(v T))。メソッド自身に新しい型パラメータは追加できない点に注意してください。これにより interface{} を使った汎用コンテナと違い、取り出すときに型アサーションが不要になります。

下の例では int 専用のスタックを作って Push / Pop します。型が固定されているので、誤った型を入れようとするとコンパイルエラーになります。出力は操作順どおりで安定します。

▶ サンプルコードを実行してみよう(自由に書き換えてOK)

Go
公式ドキュメントで詳しく ↗