【Golang】database/sqlパッケージを使ってDBに接続する方法

Golang

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への接続も上手くいくはずです。

タイトルとURLをコピーしました