[インデックス 13625] ファイルの概要
このコミットは、Go言語の実験的なパッケージである src/pkg/exp/proxy
をGo本体のリポジトリから削除するものです。このパッケージは、プロキシ機能を提供していましたが、golang.org/x/net
モジュールの一部として go.net
に移動されたため、本体からは削除されました。
コミット
commit 7fa3b9f7ea3f6c24a32a6592c4cd21ee0b1f2add
Author: Adam Langley <agl@golang.org>
Date: Tue Aug 14 13:04:14 2012 -0400
exp/proxy: remove package.
This package has moved to go.net.
R=golang-dev, minux.ma, r, dave
CC=golang-dev
https://golang.org/cl/6461056
GitHub上でのコミットページへのリンク
https://github.com/golang/go/commit/7fa3b9f7ea3f6c24a32a6592c4cd21ee0b1f2add
元コミット内容
exp/proxy: remove package. This package has moved to go.net.
このコミットは、exp/proxy
パッケージを削除するものであり、その理由はパッケージが go.net
に移動したためであると簡潔に述べられています。
変更の背景
Go言語の標準ライブラリは、その安定性と保守性を維持するために、新しい機能や実験的な機能は golang.org/x
リポジトリ群で開発されることがよくあります。src/pkg/exp
ディレクトリは、Goの初期段階において実験的なパッケージを一時的に配置するための場所として使用されていました。
proxy
パッケージは、ネットワークプロキシ機能(SOCKS5プロキシなど)を提供するためのものでしたが、これはGoのコアライブラリに直接含めるよりも、より専門的なネットワーク関連機能を提供する golang.org/x/net
モジュールの一部として管理する方が適切であると判断されました。この移動により、Goの標準ライブラリはよりスリムに保たれ、プロキシ機能は独立したモジュールとして進化できるようになりました。
前提知識の解説
- Go言語のパッケージ管理: Go言語では、コードはパッケージとして組織されます。標準ライブラリはGoのインストールに含まれていますが、それ以外の多くの有用なパッケージは
golang.org/x
サブツリーにあります。これらはGoの公式プロジェクトによって管理されていますが、標準ライブラリとは別にバージョン管理され、配布されます。 golang.org/x/net
: これは、Goのネットワーク関連機能の拡張を提供するリポジトリです。HTTP/2、WebSocket、DNS、そしてプロキシなどの高度なネットワークプロトコルやユーティリティが含まれています。標準ライブラリのnet
パッケージを補完する役割を持っています。- プロキシ (Proxy): クライアントとサーバーの間で通信を中継するサーバーのことです。セキュリティ、匿名性、キャッシング、アクセス制御などの目的で使用されます。
- SOCKS5プロキシ: SOCKS (Socket Secure) は、TCP/IP接続を介して任意のネットワークプロトコルをルーティングするためのプロトコルです。SOCKS5は、認証機能やUDP関連の機能を追加した最新バージョンです。
技術的詳細
このコミットは、src/pkg/exp/proxy
ディレクトリとその配下のすべてのファイルを削除するという、非常に直接的な変更です。これは、コードベースから特定の機能セットを物理的に除去する「移動」操作の一環です。
削除されたファイルは以下の通りです。
src/pkg/exp/proxy/direct.go
: 直接接続(プロキシを介さない接続)を扱うためのDialer
実装が含まれていました。src/pkg/exp/proxy/per_host.go
: ホストごとに異なるプロキシ設定を適用するためのロジック(バイパスリストなど)が含まれていました。src/pkg/exp/proxy/per_host_test.go
:per_host.go
のテストコードです。src/pkg/exp/proxy/proxy.go
:Dialer
インターフェースの定義、環境変数からのプロキシ設定の読み込み (FromEnvironment
)、URLスキームに基づくプロキシの選択 (FromURL
) など、プロキシパッケージの主要なインターフェースとユーティリティが含まれていました。src/pkg/exp/proxy/proxy_test.go
:proxy.go
のテストコードです。src/pkg/exp/proxy/socks5.go
: SOCKS5プロキシプロトコルを実装するための詳細なロジックが含まれていました。SOCKS5ハンドシェイク、認証、接続要求の処理などが実装されていました。
これらのファイルが削除されたことで、Goの標準ライブラリからはプロキシ機能が完全に分離され、golang.org/x/net/proxy
パッケージとして独立して管理されることになりました。これにより、Goのコア開発チームは標準ライブラリのメンテナンスに集中でき、プロキシ機能はより柔軟に開発・更新されることが可能になります。
コアとなるコードの変更箇所
このコミットは、既存のコードを削除するのみであり、新しいコードの追加や既存コードの変更はありません。
--- a/src/pkg/exp/proxy/direct.go
+++ /dev/null
@@ -1,18 +0,0 @@
-// Copyright 2011 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package proxy
-
-import (
- "net"
-)
-
-type direct struct{}
-
-// Direct is a direct proxy: one that makes network connections directly.
-var Direct = direct{}
-
-func (direct) Dial(network, addr string) (net.Conn, error) {
- return net.Dial(network, addr)
-}
上記は src/pkg/exp/proxy/direct.go
の削除を示しています。他の5つのファイルも同様に完全に削除されています。
コアとなるコードの解説
このコミットにおける「コアとなるコードの変更」は、実質的に「コアとなるコードの削除」を意味します。削除された各ファイルは、Goのプロキシパッケージの特定の側面を担っていました。
direct.go
: プロキシを介さずに直接ネットワーク接続を行うためのDialer
実装を提供していました。これは、プロキシ設定がない場合や、特定のホストをバイパスする場合のフォールバックとして機能します。per_host.go
: ホスト名やIPアドレスに基づいて、接続をプロキシ経由にするか直接接続にするかを決定するロジックを実装していました。これにより、柔軟なプロキシルーティングが可能になります。proxy.go
: プロキシパッケージの主要なエントリポイントでした。Dialer
インターフェースを定義し、環境変数 (HTTP_PROXY
,HTTPS_PROXY
,NO_PROXY
など) からプロキシ設定を読み込み、適切なDialer
を構築する機能を提供していました。また、SOCKS5などの特定のプロキシタイプをURLスキームに基づいて選択する機能も持っていました。socks5.go
: SOCKS5プロトコルのクライアント側実装を提供していました。SOCKS5ハンドシェイク、認証(ユーザー名/パスワード)、および接続要求の処理ロジックが含まれていました。
これらのファイルが削除されたことで、Goの標準ライブラリはプロキシ機能から切り離され、その機能は golang.org/x/net/proxy
パッケージに完全に移行しました。この移行により、Goの標準ライブラリはより軽量に保たれ、プロキシ機能は独立した開発サイクルを持つことができるようになりました。
関連リンク
golang.org/x/net/proxy
パッケージのドキュメント: https://pkg.go.dev/golang.org/x/net/proxy- Goの実験的なパッケージに関する議論 (Go Wiki): https://go.dev/wiki/Exp (このコミット時点では存在しない可能性もありますが、概念的な背景として)
参考にした情報源リンク
- GitHubコミットページ: https://github.com/golang/go/commit/7fa3b9f7ea3f6c24a32a6592c4cd21ee0b1f2add
- Goの公式ドキュメントおよび
golang.org/x/net/proxy
のソースコード (Web検索結果より) - RFC 1928 (SOCKS Protocol Version 5): https://datatracker.ietf.org/doc/html/rfc1928 (SOCKS5プロトコルの詳細について)
- Goのパッケージ管理に関する一般的な知識