この記事は Go Advent Calendar 2015 5 日目の記事です。 はじめに Go にはジェネリクスがありませんが、任意の型に対して共通の処理を提供したいことがあります。 例えば ORM ライブラリで User テーブルと Blog テーブルを struct で表す場合を考えてみます。 package main var db = func() *sql.DB { db, err := sql.Open("mysql", "hoge") if err != nil { panic(err) } return db }() func (u User) FindById(id int64) (*User, error) { return &u, db.QueryRow("SELECT Id, Name, Email FROM User WHERE Id = ?", id).Scan