golangからはデフォルトで入っているdbコネクタ"database/sql"とドライバ"github.com/go-sql-driver/mysql"からmysqlに接続できます。
ただ、dockerで立てたmysqlに対して、localhostへの接続がうまく行かなかったので備忘録
前提
dockerは先日限定ユーザにリリースされたdocker betaを使用しています。(多分boot2dockerを使っている場合はそれほど難しくないかも)
ホストOSはOSX El Capitanです
解決策
dockerでmysqlを立ち上げる
今回はdocker-composeを使用しました。
mysql:
  image: mysql
  ports:
    - "3306:3306" # <-これがないと外からアクセス出来ない
  expose:
    - 3306
  environment:
    MYSQL_ROOT_PASSWORD: pass
    MYSQL_DATABASE: db
    MYSQL_USER: user
    MYSQL_PASSWORD: pass
上記を設定した後docker-compose up -dでmysqlサーバの設定完了
/etc/hostsでlocalhost以外のホストを設定する
mysqlクライアントはlocalhostへの接続をしようとしたときに、ホストにあるmysql.sockを読みに行こうとしますが、dockerで立ち上げているので、そんなものは無いと怒られます。
なので、あたかもリモートサーバにアクセスしているかのように振る舞う必要があるので、暫定的にhostsにlocalhost以外の名前をわりあてました。
127.0.0.1       mysql
golangに設定を記述する
上記設定が終われば後はgolangから接続するだけです。
package main
import (
	"database/sql"
	_ "github.com/go-sql-driver/mysql"
)
func main() {
	dbconf := "user:pass@tcp(mysql:3306)/db"
	db, err := sql.Open("mysql", dbconf)
}