Golangでデータベース接続する
本章では、GO言語でデータベース接続する方法について共有します。
準備
GolangでMySQLを利用する際には、以下のライブラリを利用します。
- sql - The Go Programming Language
- GO言語で標準に用意された、DBへの接続やSQLを実行するための標準のインタフェース
- github.com
- MySQLの特殊型などに対応した、軽量で高速なドライバ
またSQLの標準インタフェースを拡張した、ライブラリも導入します。
github.com
まず、GOPATHにプロジェクトフォルダを指定し、以下のコマンドを実行します。
$ go get -u github.com/go-sql-driver/mysql
$ go get github.com/jmoiron/sqlx
プロジェクトに、ライブラリがインストールされます。
プログラム
次に、MySQLのインスタンスを利用するための接続処理を準備します。
import ( "fmt" _ "github.com/go-sql-driver/mysql" "github.com/jmoiron/sqlx" "log" "sync" ) // 各所で使い回すMySQLのインスタンスのポインタを定義 var instanceMySql *sqlx.DB // MySQLの初期化で利用する、排他ロックオブジェクト var onceMySql sync.Once func Db() *sqlx.DB { // 排他ロック制御 onceMySql.Do(func() { initializeMySql() }) return instanceMySql } func initializeMySql() { var err error // MySQLに接続する instanceMySql, err = sqlx.Connect( "mysql", "【MySQLへの接続文字列】", ) if err != nil { fmt.Println("Failed to run mysql: ", err) log.Fatalln("Failed to run mysql: ", err) } }
MySQLへの接続文字列は、localhost と cloud SQL それぞれ以下の通りです。
- cloud SQL
【ユーザー名】:【パスワード】@unix(/cloudsql/【cloud SQLで発行されるインスタンス接続名】)/【DB名】
上記のプログラムを利用し、SQL文を発行します。
user := struct { Id int `db:"Id"` Name string `db:"Name"` } var users []user s := ` SELECT Id, Name FROM User WHERE Name LIKE ?; ` if err := Db().Select(&users, s, "hoge%"); err != nil { return err }
これで、SQLが発行されデータを取得できます。Update、InsertやDeleteも、同様に操作できます。また取得できるデータが単数と予めわかっている場合、「Select」ではなく「Get」で直接構造体にバインドできます。