本稿はGo5 Advent Calendar 2019の25日目の記事です。 本稿で扱っている内容は今後変更される可能性があり、必ずしもGoのバージョンアップで取り込まれるというようなものではありません。 GopherCon 2019のIan Lance Taylor氏のGenerics in Goというセッションとその後公開されたDesign Docではコントラクトという機能が紹介/定義されています。 Design Docに登場したコントラクトは以下のように、型パラメタへの制約定義したものです。 contract C(P1, P2) { P1 m1(x P1) P2 m2(x P1) P2 P2 int, float64 } // コントラクトCを用いて関数fの型パラメタに制約をかけている func f(type P1, P2 C) (x P1, y P2) P2 { // (略) }