Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

[インデックス 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の標準ライブラリはより軽量に保たれ、プロキシ機能は独立した開発サイクルを持つことができるようになりました。

関連リンク

参考にした情報源リンク