← Go コース
59. ~ による基底型制約と型集合
制約のインターフェースには、許す型を | で並べた「型集合」を書けます。たとえば `interface { int | int64 | float64 }` は、これらのいずれかであることを要求します。これにより + や < などの演算子が使える型だけに限定できます。
ここで type MyInt int のような独自定義型を使うと、基底は int でも型としては別物なので int の集合にマッチしません。これを許したいときに使うのが ~ (チルダ)です。~int と書くと「基底型が int であるすべての型」を意味し、MyInt も含まれるようになります。
下の例では ~int|~float64 を制約にした Sum を定義します。基底が int の独自型 Celsius も渡せるため、汎用的に合計できます。出力は入力の合計で一定です。
▶ サンプルコードを実行してみよう(自由に書き換えてOK)
Go