database/sqlパッケージとは?
database/sqlパッケージは、SQLデータベースの汎用的なインターフェースを提供します。
平たく言うと、GolangからSQLを実行してDBを操作することができます。
データベースドライバと組み合わせて使用し、MySQLやPostgreSQL等のDBの種類を問わず全てのRDBに対して扱うことが可能です。
今回は、このdatabase/sqlパッケージを使ってPostgreSQLに接続する方法を解説します。
database/sqlでDBへの接続手順
基本的な書き方は以下の通りです。(PostgreSQLに接続する場合)
db, err := sql.Open("postgres", "user=ユーザー名 password=パスワード dbname=DB名 host=localhost port=5432 sslmode=disable")
if err != nil {
// error handling
}
DBへの接続をする際は、sqlパッケージのOpen関数を使用します。
sql.Open(第一引数, 第二引数)
第一引数にドライバー名(DB名)と記述し、第二引数には接続先のDB名やログインユーザー、パスワード等の情報を一つの文字列にまとめて記述します。
具体的なコード例
少し説明すると、DBへのアクセスする処理をinitDB関数にまとめ、initDB関数をmain関数の中で実行するという形式となってます。
package main
import (
"database/sql"
"log"
"github.com/gin-gonic/gin"
_ "github.com/lib/pq"
)
func initDB() *sql.DB {
db, err := sql.Open("postgres", "user=ユーザー名 password=パスワード host=localhost port=5432 dbname=DB名 sslmode=disable")
if err != nil {
log.Fatalf("[error]: データベースに接続できませんでした: %v\n", err)
}
err = db.Ping()
if err != nil {
log.Fatalf("[error]: データベースに接続できませんでした: %v\n", err)
}
log.Println("データベースに正常に接続できました。")
return db
}
func main() {
r := gin.Default()
db := initDB()
defer db.Close()
r.Run()
}
これで、ターミナルにて「go run main.go」を実行すると、
$ go run main.go
[GIN-debug] [WARNING] Creating an Engine instance with the Logger and Recovery middleware already attached.
[GIN-debug] [WARNING] Running in "debug" mode. Switch to "release" mode in production.
- using env: export GIN_MODE=release
- using code: gin.SetMode(gin.ReleaseMode)
2021/12/08 23:35:42 データベースに正常に接続できました。
[GIN-debug] [WARNING] You trusted all proxies, this is NOT safe. We recommend you to set a value.
Please check https://pkg.go.dev/github.com/gin-gonic/gin#readme-don-t-trust-all-proxies for details.
[GIN-debug] Environment variable PORT is undefined. Using port :8080 by default
[GIN-debug] Listening and serving HTTP on :8080
上記のようにサーバーが立ち上がり、PostgreSQLへの接続も上手くいくはずです。