Fork me on GitHub

概要


Goでデータベースにアクセスするためには sql.DB を使います。この型を用いて、ステートメントやトランザクションの生成、クエリの実行や結果のフェッチをすることできます。

まず最初に知っておくべきこととして sql.DB はデータベース接続ではないことです。また特定のデータベースソフトウェアの "データベース" や "スキーマ" の概念には対応していません。ネットワーク接続やインメモリ、プロセスを通じてアクセスされる様々なローカルファイルへのインターフェースと、データベースの存在を抽象化します。

sql.DB はバックグラウンドでいくつかの重要なタスクを実行します。

  • ドライバーを介して、実在するデータベースへのコネクションをOpenしたりやCloseしたりする

  • 必要に応じて様々なコネクションへのコネクションプーリングの管理をする

sql.DB の抽象化はデータベースへの同時アクセスを管理する方法について心配する必要がないように設計されています。タスクを実行するとコネクションは使用中としてマークされます。使用されなくなったときには使用可能なコネクションとしてプールに戻ります。これは、コネクションをプールに戻すことに失敗すると、sql.DB は大量のコネクションをOpenすることになります。「接続が多すぎます」、「開いているファイルハンドラが多すぎます」、「空いているネットワークポートがありません」、などといったリソース不足をもたらします。これについては後ほど詳しく説明します。

sql.DB を生成したら、データベースへクエリを発行したり、ステートメントやトランザクションを生成することができます。

次に進みます: Importing a Database Driver