← Go コース
56. 制約 — comparable と constraints
型パラメータには「どんな操作が許されるか」を表す制約(constraint)を指定します。any は何でも許す代わりに == や + などは使えません。比較(== / !=)が必要なら、組み込みの制約 comparable を使います。マップのキー型や、要素の一致を調べる関数で重宝します。
数値に対する < や + のような演算子を使いたい場合は、許す型の集合を並べたインターフェースを制約として定義します。代表的なものは準標準の golang.org/x/exp/constraints パッケージにまとまっており、Ordered(順序比較できる型)などが用意されています。自分でも `interface { int | float64 }` のように書けます。
下の例は comparable を制約に使い、スライスに目的の値が含まれるかを判定する Contains を定義します。int でも string でも == で比較できるので動きます。
▶ サンプルコードを実行してみよう(自由に書き換えてOK)
Go