Dev Study
Go コース

59. ~ による基底型制約と型集合

制約のインターフェースには、許す型を | で並べた「型集合」を書けます。たとえば `interface { int | int64 | float64 }` は、これらのいずれかであることを要求します。これにより + や < などの演算子が使える型だけに限定できます。

ここで type MyInt int のような独自定義型を使うと、基底は int でも型としては別物なので int の集合にマッチしません。これを許したいときに使うのが ~ (チルダ)です。~int と書くと「基底型が int であるすべての型」を意味し、MyInt も含まれるようになります。

下の例では ~int|~float64 を制約にした Sum を定義します。基底が int の独自型 Celsius も渡せるため、汎用的に合計できます。出力は入力の合計で一定です。

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

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