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

[インデックス 16135] ファイルの概要

このコミットは、Go言語のgo testコマンドにおける-cフラグのドキュメントを明確にするものです。具体的には、-cフラグを使用してテストバイナリをコンパイルする際に生成されるファイル名「pkg.test」が何を意味するのかについて、より詳細な説明を追加しています。

コミット

commit 212cb0375a6954121add281f355386740ed6fa27
Author: Andrew Gerrand <adg@golang.org>
Date:   Mon Apr 8 16:03:19 2013 +1000

    cmd/go: clarify what "pkg.test" means wrt the -c flag
    
    Fixes #5230.
    
    R=golang-dev, bradfitz
    CC=golang-dev
    https://golang.org/cl/8507043
---
 src/cmd/go/doc.go  | 1 +
 src/cmd/go/test.go | 1 +
 2 files changed, 2 insertions(+)

diff --git a/src/cmd/go/doc.go b/src/cmd/go/doc.go
index 664d51f257..2867e5f3f9 100644
--- a/src/cmd/go/doc.go
+++ b/src/cmd/go/doc.go
@@ -410,6 +410,7 @@ non-test installation.
 In addition to the build flags, the flags handled by 'go test' itself are:
 
 	-c  Compile the test binary to pkg.test but do not run it.
+	    (Where pkg is the last element of the package's import path.)
 
 	-i
 	    Install packages that are dependencies of the test.
diff --git a/src/cmd/go/test.go b/src/cmd/go/test.go
index babdb18503..83178d5dae 100644
--- a/src/cmd/go/test.go
+++ b/src/cmd/go/test.go
@@ -62,6 +62,7 @@ non-test installation.
 In addition to the build flags, the flags handled by 'go test' itself are:
 
 	-c  Compile the test binary to pkg.test but do not run it.
+	    (Where pkg is the last element of the package's import path.)
 
 	-i
 	    Install packages that are dependencies of the test.

GitHub上でのコミットページへのリンク

https://github.com/golang/go/commit/212cb0375a6954121add281f355386740ed6fa27

元コミット内容

cmd/go: -cフラグに関して「pkg.test」が何を意味するのかを明確にする。 Issue #5230を修正。

変更の背景

Go言語のgo testコマンドには、テストバイナリをコンパイルするが実行しないための-cフラグが存在します。このフラグを使用すると、テストバイナリはデフォルトで「pkg.test」という名前で出力されます。しかし、この「pkg」が具体的に何を指すのか、ドキュメント上では明確にされていませんでした。

ユーザーがこのコマンドを使った際に、「pkg」がパッケージのインポートパスのどの部分を指すのかが不明瞭であるため、混乱を招く可能性がありました。このコミットは、この曖昧さを解消し、ユーザーがより正確にコマンドの挙動を理解できるようにするために行われました。コミットメッセージにあるFixes #5230は、このドキュメントの不明瞭さがGoのIssueトラッカーで報告されていた問題であることを示唆しています。

前提知識の解説

Go言語のパッケージとインポートパス

Go言語では、コードは「パッケージ」という単位で管理されます。各パッケージは、ファイルシステム上のディレクトリに対応し、一意の「インポートパス」によって識別されます。例えば、github.com/user/project/subpackageのような形式です。このインポートパスの最後の要素が、通常、パッケージ名として使われます。

go testコマンド

go testは、Go言語のパッケージのテストを実行するためのコマンドです。このコマンドは、指定されたパッケージ内のテストファイル(ファイル名が_test.goで終わるもの)をコンパイルし、テストを実行します。

go test -cフラグ

go testコマンドの-cフラグは、テストバイナリをコンパイルしますが、そのテストを実行しません。代わりに、コンパイルされたテストバイナリが現在のディレクトリに保存されます。この機能は、デバッグ目的でテストバイナリを生成したり、後で手動でテストを実行したりする場合に便利です。

pkg.testファイル

-cフラグを使用すると、生成されるテストバイナリのデフォルト名はpkg.testとなります。ここで「pkg」は、テスト対象のパッケージ名に由来します。しかし、この「pkg」がインポートパスのどの部分を指すのかが、これまでのドキュメントでは不明瞭でした。例えば、github.com/user/project/subpackageというインポートパスの場合、pkgsubpackageを指します。

技術的詳細

このコミットの技術的な詳細は、Goコマンドのドキュメント(src/cmd/go/doc.go)と、go testコマンドの内部的なヘルプメッセージ(src/cmd/go/test.go)に、go test -cフラグに関する説明を追加することにあります。

具体的には、既存の「-c Compile the test binary to pkg.test but do not run it.」という説明の後に、「(Where pkg is the last element of the package's import path.)」という一文が追加されました。この追加により、pkg.testにおけるpkgが、テスト対象のパッケージのインポートパスの最後の要素であることを明確にしています。

この変更は、Goのユーザーがgo test -cコマンドの挙動をより正確に理解し、生成されるファイル名を予測できるようにすることを目的としています。これは、特に複数のパッケージを扱うプロジェクトや、CI/CDパイプラインでテストバイナリを生成・管理する際に、非常に重要な情報となります。

コアとなるコードの変更箇所

diff --git a/src/cmd/go/doc.go b/src/cmd/go/doc.go
index 664d51f257..2867e5f3f9 100644
--- a/src/cmd/go/doc.go
+++ b/src/cmd/go/doc.go
@@ -410,6 +410,7 @@ non-test installation.
 In addition to the build flags, the flags handled by 'go test' itself are:
 
 	-c  Compile the test binary to pkg.test but do not run it.
+	    (Where pkg is the last element of the package's import path.)
 
 	-i
 	    Install packages that are dependencies of the test.
diff --git a/src/cmd/go/test.go b/src/cmd/go/test.go
index babdb18503..83178d5dae 100644
--- a/src/cmd/go/test.go
+++ b/src/cmd/go/test.go
@@ -62,6 +62,7 @@ non-test installation.
 In addition to the build flags, the flags handled by 'go test' itself are:
 
 	-c  Compile the test binary to pkg.test but do not run it.
+	    (Where pkg is the last element of the package's import path.)
 
 	-i
 	    Install packages that are dependencies of the test.

コアとなるコードの解説

上記の差分が示すように、src/cmd/go/doc.gosrc/cmd/go/test.goの2つのファイルにそれぞれ1行ずつ追加が行われています。

  • src/cmd/go/doc.go: このファイルは、go helpコマンドなどで表示されるGoコマンド全体の公式ドキュメントを生成するためのソースです。ここに説明を追加することで、Goの公式ドキュメントを通じてユーザーに情報が提供されます。
  • src/cmd/go/test.go: このファイルは、go testコマンドの内部的な実装と、そのコマンドラインヘルプメッセージを定義しています。ここに説明を追加することで、go test -hgo help testといったコマンドで表示されるヘルプメッセージにもこの情報が反映されます。

追加された行は、どちらのファイルでも全く同じ「(Where pkg is the last element of the package's import path.)」というテキストです。これにより、pkg.testpkgが、テスト対象のGoパッケージのインポートパスの最後の要素(つまり、パッケージ名)であることを明確に示しています。この変更は、機能的な変更ではなく、既存の機能に関するドキュメントの明確化に特化しています。

関連リンク

参考にした情報源リンク