Golangのジェネリクスとは?どんな機能?
Go言語において、ジェネリクスとは、型をパラメータ化して、汎用的な関数やデータ構造を定義するための機能です。特定の型に依存しない関数やデータ構造を定義することができます。
使用方法は以下のようになります。
1, 関数やデータ構造を定義するときに、型パラメータを定義します。
func Example(t Type) { ... }
2, 型パラメータを実際の型に置き換えて使用します。
Example(123)
Example("hello")
ジェネリックスはGo言語には標準ではなく、第三者のパッケージを使用することで使用することができます。
具体的なコード例
ジェネリクスを使用すると、汎用的なデータ構造を定義することができます。
例えば、Stackというデータ構造を定義する場合、以下のようになります。
type Stack struct {
items []interface{}
}
func (s *Stack) Push(item interface{}) {
s.items = append(s.items, item)
}
func (s *Stack) Pop() interface{} {
if len(s.items) == 0 {
return nil
}
item := s.items[len(s.items)-1]
s.items = s.items[:len(s.items)-1]
return item
}
このスタックは、異なる型のアイテムを保存できますが、データ型の検証を行うことができません。
ですがジェネリクスを使用することで、スタックが保存できる型を限定することができます。
type Stack struct {
items []T
}
func (s *Stack) Push(item T) {
s.items = append(s.items, item)
}
func (s *Stack) Pop() T {
if len(s.items) == 0 {
return nil
}
item := s.items[len(s.items)-1]
s.items = s.items[:len(s.items)-1]
return item
}
このスタックは、T型のアイテムを保存できます。
これは一例であり、ジェネリクスは様々なデータ構造に適用することができます。これは、汎用的なデータ構造を定義し、特定の型に依存しないコードを書くために非常に有用です。