この記事は Go Advent Calendar 2015 5 日目の記事です。 はじめに Go にはジェネリクスがありませんが、任意の型に対して共通の処理を提供したいことがあります。 例えば ORM ライブラリで User テーブルと Blog テーブルを struct で表す場合を考えてみます。 type User struct { Id int64 Name string Email string } type Blog struct { Id int64 Title string Body string } この 2 つの struct に対して共通の処理、例えば id で検索して結果を返す FindById というメソッドを提供したいとします。 Go は静的型付き言語なので、複数の型を引数に取ったり、複数の型を返すといったメソッドを定義することはできません。 よって、それぞれの型