[インデックス 16074] ファイルの概要
このコミットは、Go言語の次期リリース(Go 1.1.xまたはそれ以降)で導入される予定のAPI変更を記録するapi/next.txt
ファイルを更新するものです。api/next.txt
は、GoのAPI互換性ポリシーに従い、将来のリリースで追加または変更される公開API要素を追跡するために使用されます。このファイルへの変更は、Goの標準ライブラリに新しい機能が追加されたり、既存のAPIが改善されたりしたことを示しています。
コミット
commit 3c0a5b8636409ca69f6afa8309e6cbe299a5af1d
Author: Brad Fitzpatrick <bradfitz@golang.org>
Date: Wed Apr 3 10:41:28 2013 -0700
api: update next.txt.
Update #4871
R=golang-dev, r
CC=golang-dev
https://golang.org/cl/8287044
GitHub上でのコミットページへのリンク
https://github.com/golang/go/commit/3c0a5b8636409ca69f6afa8309e6cbe299a5af1d
元コミット内容
このコミットの元々の内容は、api/next.txt
ファイルを更新することです。具体的には、Goの標準ライブラリにおけるいくつかの新しいAPI要素の追加と、既存のAPIの変更(主にnet
パッケージにおける接続オプションの再設計とgo/doc
パッケージのノート構造の改善)が反映されています。
変更の背景
このコミットの背景には、Go言語の標準ライブラリの継続的な改善と機能拡張があります。api/next.txt
は、Goのリリースプロセスにおいて重要な役割を果たします。Goは厳格なGo 1 Compatibility Promiseを持っており、Go 1.xリリースでは既存の公開APIの互換性を維持することが保証されています。しかし、新しい機能の追加や既存のAPIの改善は常に行われており、それらの変更はapi/next.txt
に記録されます。
このコミットで追加されたAPIは、それぞれ特定のユースケースや改善要求に対応しています。例えば、database/sql
パッケージへのPing
メソッドの追加はデータベース接続の健全性チェックを容易にし、SetMaxIdleConns
はデータベース接続プールの管理を改善します。net
パッケージにおけるDialer
構造体の導入は、ネットワーク接続の確立におけるオプション設定をより柔軟かつ統一的に行うための再設計です。また、go/doc
パッケージの変更は、ドキュメンテーション生成におけるノート(コメント内の特定の形式のメモ)の扱いをより構造化するためのものです。
前提知識の解説
- Go 1 Compatibility Promise: Go言語のバージョン1以降のリリースにおいて、既存のプログラムが新しいバージョンでも動作し続けることを保証するポリシーです。これにより、Goのエコシステムは安定性を保ちつつ進化できます。ただし、新しいAPIの追加や内部実装の変更は行われます。
api/next.txt
: Goプロジェクト内で管理されているテキストファイルで、次期Goリリースで導入される予定の公開APIの変更(追加、削除、変更)がリストアップされています。GoのAPI互換性チェックツールはこのファイルを参照し、互換性が維持されているかを確認します。- Goの標準ライブラリ: Go言語に同梱されている豊富なパッケージ群で、ネットワーキング、ファイルI/O、暗号化、データ構造など、幅広い機能を提供します。Goアプリケーション開発の基盤となります。
compress/gzip
パッケージ: GZIP形式の圧縮データを読み書きするための機能を提供します。database/sql
パッケージ: データベースにアクセスするための汎用的なインターフェースを提供します。特定のデータベースドライバに依存しない抽象化レイヤーです。encoding/xml
パッケージ: XMLデータをエンコードおよびデコードするための機能を提供します。go/build
パッケージ: Goのパッケージビルドプロセスに関する情報(Goソースファイルの解析、依存関係の解決など)を提供します。go/doc
パッケージ: Goのソースコードからドキュメンテーションを生成するための機能を提供します。net
パッケージ: ネットワークI/Oのプリミティブを提供します。TCP/IP、UDP、Unixドメインソケットなどのネットワークプロトコルを扱います。os/signal
パッケージ: プロセスに送信されるシグナル(例: Ctrl+Cによる割り込み)を処理するための機能を提供します。
技術的詳細
このコミットは、api/next.txt
の変更を通じて、Go標準ライブラリの複数のパッケージにおけるAPIの進化を示しています。
-
compress/gzip
パッケージ:pkg compress/gzip, method (*Writer) Flush() error
の追加:gzip.Writer
にFlush()
メソッドが追加されました。これにより、圧縮バッファの内容を強制的に基になるio.Writer
に書き出すことができるようになります。これは、リアルタイム性の高いデータストリーム処理や、部分的に圧縮データを送信する必要がある場合に有用です。
-
database/sql
パッケージ:pkg database/sql, method (*DB) Ping() error
の追加:sql.DB
にPing()
メソッドが追加されました。これは、データベースへの接続がまだ有効であるか、または確立可能であるかをチェックするために使用されます。アプリケーションがデータベースとの接続を維持していることを確認したり、接続が切断された場合に再接続を試みたりする際に役立ちます。pkg database/sql, method (*DB) SetMaxIdleConns(int)
の追加:sql.DB
にSetMaxIdleConns()
メソッドが追加されました。これは、アイドル状態の接続プールに保持される最大接続数を設定します。これにより、データベース接続の再利用が促進され、接続確立のオーバーヘッドが削減されます。
-
encoding/xml
パッケージ:pkg encoding/xml, type Decoder struct, DefaultSpace string
の追加:xml.Decoder
構造体にDefaultSpace
フィールドが追加されました。これは、XML要素のデフォルトの名前空間URIを設定するために使用されます。これにより、名前空間が明示的に指定されていないXML要素の処理が容易になります。
-
go/build
パッケージ:pkg go/build, type Context struct, InstallTag string
の削除とpkg go/build, type Context struct, InstallSuffix string
の追加:Context
構造体のInstallTag
フィールドがInstallSuffix
に名称変更されました。これは、ビルド成果物のインストールパスに付加されるサフィックスをより正確に表現するための変更です。pkg go/build, type Context struct, ReleaseTags []string
の追加:Context
構造体にReleaseTags
フィールドが追加されました。これは、特定のGoリリースバージョンに関連付けられたビルドタグ(例:go1.1
,go1.2
など)を管理するために使用されます。これにより、特定のGoバージョン向けに条件付きでコードをコンパイルする際に役立ちます。
-
go/doc
パッケージ:pkg go/doc, type Package struct, Notes map[string][]string
の削除と、pkg go/doc, type Note struct
および関連フィールドの追加、pkg go/doc, type Package struct, Notes map[string][]*Note
の追加:go/doc
パッケージにおけるドキュメンテーションノートの表現が、より構造化されたNote
型に置き換えられました。以前は単なる文字列のスライスでしたが、新しいNote
型はBody
(ノートの内容)、End
、Pos
(ソースコード内の位置)、UID
(ユニークID)などのフィールドを持つようになりました。これにより、ドキュメンテーションツールがノートをより詳細に解析し、表示できるようになります。
-
net
パッケージ:DialOption
インターフェースおよび関連するDialOpt
,Deadline
,LocalAddress
,Network
,Timeout
関数、TCP
,UDP
変数の削除: 以前のDialOption
ベースの接続オプション設定メカニズムが削除されました。pkg net, type Dialer struct
および関連フィールド(Deadline
,LocalAddr
,Timeout
)の追加、pkg net, method (*Dialer) Dial(string, string) (Conn, error)
の追加: ネットワーク接続の確立方法が、新しいDialer
構造体とそのDial
メソッドに集約されました。Dialer
構造体は、接続のタイムアウト、ローカルアドレスのバインド、デッドラインなどのオプションをフィールドとして持ちます。これにより、接続オプションの管理がよりオブジェクト指向的かつ柔軟になり、将来的な拡張性も向上します。これは、Go 1.1で導入された重要な変更点の一つです。
-
os/signal
パッケージ:pkg os/signal, func Stop(chan<- os.Signal)
の追加:signal.Stop()
関数が追加されました。これは、signal.Notify()
で登録された特定のシグナルチャネルへのシグナル配信を停止するために使用されます。これにより、シグナルハンドリングのライフサイクル管理がより細かく制御できるようになります。
これらの変更は、Go言語が成熟し、より多様なユースケースに対応するために、標準ライブラリが継続的に改善されていることを示しています。特にnet
パッケージのDialer
への移行は、ネットワークプログラミングにおける柔軟性と堅牢性を高めるための重要な再設計です。
コアとなるコードの変更箇所
このコミット自体は、Goのソースコードではなく、GoのAPI変更を記録するapi/next.txt
ファイルのみを変更しています。したがって、直接的なGoのコアコードの変更はありません。
api/next.txt
の変更内容は以下の通りです。
--- a/api/next.txt
+++ b/api/next.txt
@@ -28,6 +28,7 @@ pkg bytes, func TrimPrefix([]uint8, []uint8) []uint8
pkg bytes, func TrimSuffix([]uint8, []uint8) []uint8
pkg bytes, method (*Buffer) Grow(int)
pkg bytes, method (*Reader) WriteTo(io.Writer) (int64, error)
+pkg compress/gzip, method (*Writer) Flush() error
pkg crypto/hmac, func Equal([]uint8, []uint8) bool
pkg crypto/tls, const TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA uint16
pkg crypto/tls, const TLS_RSA_WITH_AES_256_CBC_SHA uint16
@@ -61,6 +62,8 @@ pkg crypto/x509, type PEMCipher int
pkg crypto/x509, type SystemRootsError struct
pkg crypto/x509, type VerifyOptions struct, KeyUsages []ExtKeyUsage
pkg crypto/x509, var IncorrectPasswordError error
+pkg database/sql, method (*DB) Ping() error
+pkg database/sql, method (*DB) SetMaxIdleConns(int)
pkg database/sql/driver, type Queryer interface { Query }
pkg database/sql/driver, type Queryer interface, Query(string, []Value) (Rows, error)
pkg debug/elf, method (*File) DynString(DynTag) ([]string, error)
@@ -89,6 +92,7 @@ pkg encoding/json, method (Number) String() string
pkg encoding/json, type Number string
pkg encoding/xml, func EscapeText(io.Writer, []uint8) error
pkg encoding/xml, method (*Encoder) Indent(string, string)
+pkg encoding/xml, type Decoder struct, DefaultSpace string
pkg go/ast, func NewCommentMap(*token.FileSet, Node, []*CommentGroup) CommentMap
pkg go/ast, method (CommentMap) Comments() []*CommentGroup
pkg go/ast, method (CommentMap) Filter(Node) CommentMap
@@ -96,14 +100,20 @@ pkg go/ast, method (CommentMap) String() string
pkg go/ast, method (CommentMap) Update(Node, Node) Node
pkg go/ast, type ChanType struct, Arrow token.Pos
pkg go/ast, type CommentMap map[Node][]*CommentGroup
-pkg go/build, type Context struct, InstallTag string
+pkg go/build, type Context struct, InstallSuffix string
+pkg go/build, type Context struct, ReleaseTags []string
pkg go/build, type Package struct, IgnoredGoFiles []string
pkg go/build, type Package struct, SwigCXXFiles []string
pkg go/build, type Package struct, SwigFiles []string
pkg go/doc, type Example struct, EmptyOutput bool
pkg go/doc, type Example struct, Order int
pkg go/doc, type Example struct, Play *ast.File
-pkg go/doc, type Package struct, Notes map[string][]string
+pkg go/doc, type Note struct
+pkg go/doc, type Note struct, Body string
+pkg go/doc, type Note struct, End token.Pos
+pkg go/doc, type Note struct, Pos token.Pos
+pkg go/doc, type Note struct, UID string
+pkg go/doc, type Package struct, Notes map[string][]*Note
pkg go/doc, var IllegalPrefixes []string
pkg go/format, func Node(io.Writer, *token.FileSet, interface{}) error
pkg go/format, func Source([]uint8) ([]uint8, error)
@@ -339,27 +349,24 @@ pkg math/big, method (*Int) UnmarshalJSON([]uint8) error
pkg math/big, method (*Rat) Float64() (float64, bool)
pkg math/big, method (*Rat) SetFloat64(float64) *Rat
pkg mime/multipart, method (*Writer) SetBoundary(string) error
-pkg net, func Deadline(time.Time) DialOption
-pkg net, func DialOpt(string, ...DialOption) (Conn, error)
pkg net, func ListenUnixgram(string, *UnixAddr) (*UnixConn, error)
-pkg net, func LocalAddress(Addr) DialOption
pkg net, func LookupNS(string) ([]*NS, error)
-pkg net, func Network(string) DialOption
-pkg net, func Timeout(time.Duration) DialOption
+pkg net, method (*Dialer) Dial(string, string) (Conn, error)
pkg net, method (*IPConn) ReadMsgIP([]uint8, []uint8) (int, int, int, *IPAddr, error)
pkg net, method (*IPConn) WriteMsgIP([]uint8, []uint8, *IPAddr) (int, int, error)
pkg net, method (*UDPConn) ReadMsgUDP([]uint8, []uint8) (int, int, int, *UDPAddr, error)
pkg net, method (*UDPConn) WriteMsgUDP([]uint8, []uint8, *UDPAddr) (int, int, error)
pkg net, method (*UnixConn) CloseRead() error
pkg net, method (*UnixConn) CloseWrite() error
-pkg net, type DialOption interface, unexported methods
+pkg net, type Dialer struct
+pkg net, type Dialer struct, Deadline time.Time
+pkg net, type Dialer struct, LocalAddr Addr
+pkg net, type Dialer struct, Timeout time.Duration
pkg net, type IPAddr struct, Zone string
pkg net, type NS struct
pkg net, type NS struct, Host string
pkg net, type TCPAddr struct, Zone string
pkg net, type UDPAddr struct, Zone string
-pkg net, var TCP DialOption
-pkg net, var UDP DialOption
pkg net/http, func ParseTime(string) (time.Time, error)
pkg net/http, method (*Request) PostFormValue(string) string
pkg net/http, method (*ServeMux) Handler(*Request) (Handler, string)
@@ -384,6 +391,7 @@ pkg net/smtp, method (*Client) Hello(string) error
pkg net/textproto, func TrimBytes([]uint8) []uint8
pkg net/textproto, func TrimString(string) string
pkg os, method (FileMode) IsRegular() bool
+pkg os/signal, func Stop(chan<- os.Signal)
pkg reflect, const SelectDefault SelectDir
pkg reflect, const SelectRecv SelectDir
pkg reflect, const SelectSend SelectDir
コアとなるコードの解説
このコミットは、GoのAPI互換性チェックのメカニズムの一部であるapi/next.txt
ファイルを更新するものです。このファイル自体は実行可能なコードではありませんが、Goの標準ライブラリの公開APIがどのように進化しているかを示す重要なドキュメントです。
api/next.txt
の各行は、pkg <package_path>, <type_or_func_signature>
の形式で、Goの公開API要素を表します。このファイルに追加された行は新しいAPI要素の導入を、削除された行は既存API要素の削除または変更(通常はより新しいAPIへの置き換え)を示します。
このコミットで追加・削除された各API要素の具体的なコード変更は、このコミットの範囲外で行われた、それぞれの機能追加や改善を実装する別のコミットによって導入されています。このapi/next.txt
の更新は、それらの変更がGoのAPI互換性ポリシーに準拠していることを公式に記録するステップです。
例えば、pkg database/sql, method (*DB) Ping() error
が追加されたということは、database/sql
パッケージのDB
型にPing
メソッドが追加された実際のGoコードの変更が、このapi/next.txt
の更新よりも前に(または同時に)行われていることを意味します。
特に注目すべきはnet
パッケージの変更です。これは、以前の関数ベースのDialOption
メカニズムから、より構造化されたDialer
型とそれに関連するメソッドへの移行を示しています。これにより、ネットワーク接続の確立におけるオプション設定がより柔軟かつ統一的に扱えるようになります。これは、Go 1.1リリースにおける重要なAPIの再設計の一つでした。
関連リンク
- Go 1 Compatibility Promise: https://go.dev/doc/go1compat
- Go 1.1 Release Notes (関連するAPI変更の詳細が記載されている可能性があります): https://go.dev/doc/go1.1
- Goの
api
ディレクトリに関する説明 (Goのソースコードリポジトリ内): https://github.com/golang/go/tree/master/api
参考にした情報源リンク
- Goの公式ドキュメンテーション
- Goのソースコードリポジトリ (特に
api/next.txt
の履歴と、関連するパッケージのソースコード) - GoのメーリングリストやIssueトラッカー (コミットメッセージに記載されているIssue #4871やCL 8287044など)
- Go 1.1のリリースノートや関連するブログ記事 (当時の情報源)