Goのジェネリクス〜comparable型パラメータ
こんにちは。まるりんです。
Tour of Goの英語版にジェネリクスの章が追加されていたので紹介します。
Type parameters
https://go.dev/tour/generics/1
以下のように型パラメータT comparable
を引数の前に定義します。
comparable
は組込みのインタフェースで型Tに制約を加えます。sは任意の型Tのスライスでxはスライスの要素と同じ型です。
func Index[T comparable](s []T, x T) int {
型パラメータT comparable
は==
や!=
で比較可能な値のみ引数に受け取れます。
しかし<
や>=
は使えないようです。なぜでしょうか。
Goの演算子は言語によって事前に定義された型またはそれらの型をベースに定義した型のみに適用できるようです。
この仕様には例外があり、それが==
と!=
です。これらの演算子は構造体、配列やインタフェース型などにも適用可能です。
この仕様を型パラメータで実現するためにcomparable
が用意されているようです。
https://go.googlesource.com/proposal/+/refs/heads/master/design/43651-type-parameters.md
あまり自信のない理解ですがとりあえずこのように解釈しておこうと思います。