Go言語でのDBアクセスについて¶
database/sql¶
概要¶
Go言語のdatabase/sql
パッケージは、SQLデータベース操作のための標準インターフェースを提供するパッケージです。RDBMSごとに異なるドライバを組み合わせて利用することで、MySQLやPostgreSQL、SQLiteなど多様なデータベースに対応できます[2][5][8]。
主な特徴と使い方
ドライバのインポート
利用するDBに応じたドライバ(例:github.com/go-sql-driver/mysql
)を_
付きでインポートします。これはドライバのinit()
を実行し、database/sql
から利用可能にするためです[2][3]。接続管理
sql.Open
でデータベース接続用の*sql.DB
オブジェクトを取得しますが、これは実際のコネクションではなくコネクションプールの管理やクエリ発行のための抽象インターフェースです。実接続の確認にはdb.Ping()
を使います[2][3]。クエリ実行
トランザクション
db.Begin
でトランザクションを開始し、tx.Commit
またはtx.Rollback
で完了・中断を制御します。エラー発生時は必ずロールバックすることが推奨されます[2][17]。プリペアドステートメントとプレースホルダ
SQLインジェクション対策として、?
や$1
などのプレースホルダを使い、引数で値を渡します[2][15]。NULL値の扱い
NULLを許容するカラムはポインタ型やsql.NullString
などの専用型で受け取ります[6]。接続のクローズ
使用後はdb.Close()
でコネクションプールを閉じます。各クエリのrows
もdefer rows.Close()
で明示的にクローズします[2]。
まとめ
database/sql
は汎用的なインターフェースを持ち、ドライバを切り替えるだけで異なるDBにも対応可能です。コネクションプールやトランザクション、プリペアドステートメントなど、実運用に必要な機能を標準で備えており、GoでのDB操作の基盤となっています[2][3][5]。