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]。