[インデックス 11284] ファイルの概要
コミット
commit 7fc4c07172b7b6feb2da345511ad439fedaf876b
Author: Brad Fitzpatrick <bradfitz@golang.org>
Date: Thu Jan 19 16:04:26 2012 -0800
database/sql: move from exp/sql
R=golang-dev, r
CC=golang-dev
https://golang.org/cl/5536076
GitHub上でのコミットページへのリンク
https://github.com/golang/go/commit/7fc4c07172b7b6feb2da345511ad439fedaf876b
元コミット内容
このコミットは、Go言語の標準ライブラリにおいて、実験的なパッケージを格納する exp/sql
および exp/sql/driver
パッケージを、正式な標準ライブラリの一部である database/sql
および database/sql/driver
へと移動するものです。これにより、database/sql
パッケージがGo 1のリリースに向けて安定版として位置づけられることになります。
変更の背景
Go言語の開発プロセスにおいて、新しい機能やAPIはしばしば exp
(experimental) パッケージとして導入されます。exp
パッケージは、その名の通り実験的な性質を持ち、APIの変更や削除が予告なく行われる可能性があります。これは、開発者が新しいアイデアを試したり、コミュニティからのフィードバックを収集したりするための「テストグラウンド」として機能します。
database/sql
パッケージは、Go言語でSQLデータベースと対話するための汎用的なインターフェースを提供する重要なパッケージです。Go 1のリリースが近づくにつれて、このパッケージが十分に成熟し、安定したAPIを提供できると判断されたため、exp
から標準ライブラリの正式な位置へと昇格させる必要がありました。この移動は、database/sql
がGo 1の互換性保証の対象となり、プロダクション環境での使用に適していることを示すものです。
前提知識の解説
Go言語の exp
パッケージ
Go言語における exp
パッケージは、golang.org/x/exp
の下に配置される実験的なライブラリ群を指します。これらのパッケージは、Goの標準ライブラリに将来的に組み込まれる可能性のある新機能やAPIのプロトタイプとして機能します。exp
パッケージのAPIは不安定であり、Go 1の互換性保証の対象外であるため、プロダクションコードでの使用は推奨されません。しかし、コミュニティが新しい機能を試したり、フィードバックを提供したりする場として非常に重要です。
database/sql
パッケージ
database/sql
パッケージは、Go言語の標準ライブラリに含まれる、SQLデータベースとの対話のための汎用的なインターフェースを提供するパッケージです。このパッケージ自体は特定のデータベースの実装を含まず、データベースドライバーを介して様々なデータベース(PostgreSQL, MySQL, SQLiteなど)に接続します。database/sql
は、接続プール管理、トランザクション、プリペアドステートメントなどの基本的な機能を提供し、Goアプリケーションからデータベースを操作するための基盤となります。
database/sql/driver
パッケージ
database/sql/driver
パッケージは、database/sql
パッケージがデータベースドライバーと連携するためのインターフェースを定義しています。データベースドライバーは、この driver
パッケージで定義されたインターフェース(Driver
, Conn
, Stmt
, Rows
など)を実装することで、database/sql
パッケージを介して利用可能になります。これにより、Goアプリケーションはデータベースドライバーの実装詳細を意識することなく、統一されたAPIでデータベースを操作できます。
技術的詳細
このコミットの技術的な変更は、主にファイルパスの変更と、それに伴う参照パスの更新に集約されます。
-
ファイルパスの変更:
src/pkg/exp/sql
ディレクトリとそのサブディレクトリ内のすべてのファイルが、src/pkg/database/sql
へと移動されました。- 同様に、
src/pkg/exp/sql/driver
ディレクトリとそのサブディレクトリ内のすべてのファイルが、src/pkg/database/sql/driver
へと移動されました。
-
Makefile
の更新:- Goのビルドシステムは
Makefile
を利用しており、パッケージのパスが変更されたため、src/pkg/Makefile
内のDIRS
変数からexp/sql
とexp/sql/driver
が削除され、代わりにdatabase/sql
とdatabase/sql/driver
が追加されました。 - 各パッケージの
Makefile
(src/pkg/exp/sql/Makefile
とsrc/pkg/exp/sql/driver/Makefile
がそれぞれsrc/pkg/database/sql/Makefile
とsrc/pkg/database/sql/driver/Makefile
にリネームされた後) 内のTARG
変数も、新しいパッケージパスに合わせて更新されました。
- Goのビルドシステムは
-
Goソースコード内のインポートパスの更新:
src/pkg/exp/sql
内のGoソースファイル(例:convert.go
,fakedb_test.go
,sql.go
)では、exp/sql/driver
をインポートしていた箇所がdatabase/sql/driver
に変更されました。これは、パッケージの物理的な移動に伴い、そのパッケージが提供する型や関数を参照するためのパスも更新する必要があるためです。
これらの変更は、Goのモジュールシステムが導入される前の、Go 1リリース初期のパッケージ管理とビルドプロセスの典型的な例を示しています。当時は、パッケージのパスがファイルシステムの階層構造に直接マッピングされており、パッケージの移動はファイルのリネームと、それに依存するすべてのコードのインポートパスの更新を伴いました。
コアとなるコードの変更箇所
このコミットでは、主に以下のファイルが変更されています。
src/pkg/Makefile
: ビルド対象ディレクトリのリストを更新。src/pkg/{exp => database}/sql/Makefile
: パッケージのターゲット名を更新。src/pkg/{exp => database}/sql/convert.go
:exp/sql/driver
からdatabase/sql/driver
へのインポートパス変更。src/pkg/{exp => database}/sql/convert_test.go
:exp/sql/driver
からdatabase/sql/driver
へのインポートパス変更。src/pkg/{exp => database}/sql/doc.txt
: ファイルのリネームのみ。src/pkg/{exp => database}/sql/driver/Makefile
: パッケージのターゲット名を更新。src/pkg/{exp => database}/sql/driver/driver.go
: ファイルのリネームのみ。src/pkg/{exp => database}/sql/driver/types.go
: ファイルのリネームのみ。src/pkg/{exp => database}/sql/driver/types_test.go
: ファイルのリネームのみ。src/pkg/{exp => database}/sql/fakedb_test.go
:exp/sql/driver
からdatabase/sql/driver
へのインポートパス変更。src/pkg/{exp => database}/sql/sql.go
:exp/sql/driver
からdatabase/sql/driver
へのインポートパス変更。src/pkg/{exp => database}/sql/sql_test.go
: ファイルのリネームのみ。
特に重要な変更は、src/pkg/Makefile
と、convert.go
, convert_test.go
, fakedb_test.go
, sql.go
内のインポートパスの変更です。
src/pkg/Makefile
の変更
--- a/src/pkg/Makefile
+++ b/src/pkg/Makefile
@@ -59,6 +59,8 @@ DIRS=\
crypto/x509\
crypto/x509/pkix\
crypto/xtea\
++ database/sql\
++ database/sql/driver\
debug/dwarf\
debug/macho\
debug/elf\
@@ -82,8 +84,6 @@ DIRS=\
exp/gotype\
exp/norm\
exp/spdy\
-- exp/sql\
-- exp/sql/driver\
exp/ssh\
exp/terminal\
exp/types\
src/pkg/exp/sql/Makefile
(リネーム後 src/pkg/database/sql/Makefile
) の変更
--- a/src/pkg/exp/sql/Makefile
+++ b/src/pkg/database/sql/Makefile
@@ -4,7 +4,7 @@
include ../../../Make.inc
-TARG=exp/sql
+TARG=database/sql
GOFILES=\
convert.go\
sql.go\
src/pkg/exp/sql/convert.go
(リネーム後 src/pkg/database/sql/convert.go
) の変更
--- a/src/pkg/exp/sql/convert.go
+++ b/src/pkg/database/sql/convert.go
@@ -7,8 +7,8 @@
package sql
import (
++ "database/sql/driver"
"errors"
-- "exp/sql/driver"
"fmt"
"reflect"
"strconv"
コアとなるコードの解説
src/pkg/Makefile
の変更
src/pkg/Makefile
は、Goの標準ライブラリに含まれるすべてのパッケージのビルドを管理する主要なファイルです。DIRS
変数には、ビルド対象となるパッケージのディレクトリパスがリストされています。このコミットでは、exp/sql
と exp/sql/driver
が DIRS
から削除され、代わりに database/sql
と database/sql/driver
が追加されています。これは、ビルドシステムに対して、これらのパッケージが新しい場所にあることを伝え、Go 1の標準ライブラリの一部としてビルドされるように指示するものです。
src/pkg/{exp => database}/sql/Makefile
の変更
各パッケージの Makefile
には、そのパッケージのビルドに関する情報が含まれています。特に TARG
変数は、そのパッケージの最終的なターゲットパス(インポートパス)を定義します。この変更は、パッケージが exp/sql
から database/sql
へと正式に昇格したことを反映しており、Goのツールチェーンが正しいインポートパスでパッケージを解決できるようにするために不可欠です。
src/pkg/{exp => database}/sql/convert.go
などGoソースコード内のインポートパスの変更
Go言語では、パッケージのインポートパスは、そのパッケージがファイルシステム上のどこに存在するかと密接に関連しています。exp/sql/driver
をインポートしていたGoソースファイルは、exp/sql
パッケージが database/sql
に移動されたことに伴い、database/sql/driver
をインポートするように変更されました。これは、Goコンパイラが依存関係を正しく解決し、新しいパッケージパスから driver
パッケージの型や関数を見つけられるようにするために必要です。この変更は、パッケージの物理的な移動が、そのパッケージに依存するすべてのコードに影響を与えることを示しています。
これらの変更は、database/sql
パッケージがGo 1の標準ライブラリとして安定し、広く利用されるための重要なステップでした。
関連リンク
- Go Code Review: https://golang.org/cl/5536076
参考にした情報源リンク
- Go (Golang) exp packages meaning: https://vertexaisearch.cloud.google.com/grounding-api-redirect/AUZIYQEFTA8_zfDTVtBXVWosexUH8fv1fj65PQZAZakWs2kCXNayME_L9Q8xrOVv7OrbHUAIftUCQgRwXi4f9Rdq1Fpm2NyrtmcjYlmJKmUE0GY33iYVsqdBT2z6kHBS8lZW9qr4gt7WH7a528nqv49Vo7-2368cQACbRAskTPAtWS3b25WW8A==
- Go (Golang) database/sql history: https://vertexaisearch.cloud.google.com/grounding-api-redirect/AUZIYQEnNYTCfeEQMYRfmSYzBIgevFKHP0sfQq5CVdxIHTMlluBjTy8DrI5q-Bama6Q9oHIQHdHkdQlUN7cpwYYHtAN9v7HL6zz6oNCEgwMUJ-YTW6ZAU9_2NM5UDw9ogvpwikYNKiXgAzmwv3WlREAykSHA2RN3Emo=
- Go 1 Release: https://vertexaisearch.cloud.google.com/grounding-api-redirect/AUZIYQFCVFz4UUujqIvSRhjE8Q8JAnqTG1-gFjZ3xyASckRYLGQe62KgnvpPspYoLYP-EqTVJOv9JQh_D0gUZsC4XxAx5xWtp_EzsAoVj5u-OgJpxnZ2opkcPU0K6PojQyeGD85LAKTRrnMjtJZofmiOo5JycCM=
- Go
database/sql
package documentation: https://vertexaisearch.cloud.google.com/grounding-api-redirect/AUZIYQFW7b0c6sQaF_NRCeoV1wnbamwH4wXMc-vQvEsk5iDLU5y8tMHQnxgkT6Ue7qcAbvJHHHm8vd9rT4AvZjikO6x9hTE-WoE-SedFmqKkYFoY5l_R6YX6ya8082I=