Documentation
¶
Overview ¶
buildパッケージはGoのパッケージに関する情報を収集します。
Go Path ¶
Goパスは、Goのソースコードが含まれているディレクトリツリーのリストです。 これは、標準のGoツリーで見つからないインポートを解決するために参照されます。 デフォルトのパスは、GOPATH環境変数の値であり、オペレーティングシステムに適したパスリストとして解釈されます (Unixでは変数はコロンで区切られた文字列であり、 Windowsではセミコロンで区切られた文字列、 Plan 9ではリストです)。
Goパスにリストされている各ディレクトリには、指定された構造が必要です:
src/ディレクトリにはソースコードが格納されます。'src'以下のパスがインポートパスまたは実行可能ファイル名を決定します。
pkg/ディレクトリにはインストールされたパッケージオブジェクトが格納されます。 Goツリーと同様に、各ターゲットオペレーティングシステムと アーキテクチャのペアに対して、pkgのサブディレクトリがあります (pkg/GOOS_GOARCH)。
DIRがGoパスにリストされているディレクトリである場合、DIR/src/foo/barにソースがあるパッケージは「foo/bar」としてインポートされ、 「DIR/pkg/GOOS_GOARCH/foo/bar.a」(またはgccgoの場合は「DIR/pkg/gccgo/foo/libbar.a」)にコンパイルされた形式でインストールされます。
bin/ディレクトリにはコンパイルされたコマンドが格納されます。 各コマンドは、ソースディレクトリを使用して命名されますが、 パス全体ではなく最終要素のみを使用します。つまり、 DIR/src/foo/quuxのソースであるコマンドはDIR/bin/quuxにインストールされます。DIR/bin/foo/quuxではなく、foo/が取り除かれます。 そのため、PATHにDIR/binを追加することで、インストールされたコマンドにアクセスできます。
以下にディレクトリレイアウトの例を示します:
GOPATH=/home/user/gocode
/home/user/gocode/
src/ foo/ bar/ (パッケージ bar の Goコード) x.go quux/ (メインパッケージの Goコード) y.go bin/ quux (インストールされたコマンド) pkg/ linux_amd64/ foo/ bar.a (インストールされたパッケージオブジェクト)
ビルド制約 ¶
ビルド制約、またはビルドタグとも呼ばれるものは、 パッケージに含めるべきファイルの条件です。ビルド制約は、次の行コメントによって与えられます。
//go:build
ビルド制約は、ファイル名の一部にもなることがあります (例えば、source_windows.go は、対象の オペレーティングシステムがwindowsの場合のみ含まれます)。
詳細は 'go help buildconstraint' (https://golang.org/cmd/go/#hdr-Build_constraints) を参照してください。
バイナリのみのパッケージ ¶
Go 1.12 およびそれ以前では、 パッケージをソースコードなしでバイナリ形式で配布することが可能でした。 パッケージには、ビルド制約で除外されないソースファイルと 「//go:binary-only-package」というコメントが含まれていました。ビルド制約と同様に、このコメントはファイルの先頭に配置され、空行と他の行コメントだけが前にあること、コメントの後には空行があることで、パッケージのドキュメンテーションと区別されます。 ビルド制約とは異なり、このコメントは非テストのGoソースファイルでのみ認識されます。
バイナリのみのパッケージの最小のソースコードは以下のようになります:
//go:binary-only-package package mypkg
ソースコードには追加のGoコードが含まれる可能性があります。このコードはコンパイルされないが、godocなどのツールによって処理され、エンドユーザのドキュメンテーションとして役立つかもしれません。
"go build" およびその他のコマンドはバイナリオンリーパッケージをサポートしていません。 Import と ImportDir は、これらのコメントを含むパッケージのBinaryOnlyフラグを設定し、ツールやエラーメッセージで利用することができます。
Index ¶
Constants ¶
This section is empty.
Variables ¶
var ToolDir = getToolDir()
ToolDirはビルドツールを含むディレクトリです。
Functions ¶
func ArchChar ¶
ArchCharは"?"とエラーを返します。 Goの以前のバージョンでは、返された文字列はコンパイラとリンカのツール名、デフォルトのオブジェクトファイルの接尾辞、 およびデフォルトのリンカの出力名に使用されました。Go 1.5以降、これらの文字列はアーキテクチャによって異なりません。 それらの文字列は、compile、link、.o、およびa.outです。
func IsLocalImport ¶
IsLocalImportは、インポートパスがローカルなインポートパス("."、".."、"./foo"、または"../foo"など)であるかどうかを報告します。
Types ¶
type Context ¶
type Context struct { GOARCH string GOOS string GOROOT string GOPATH string // Dirは呼び出し元の作業ディレクトリです。空の文字列の場合、実行中のプロセスのカレントディレクトリが使用されます。モジュールモードでは、これはメインモジュールを特定するために使用されます。 // // Dirが空でない場合、ImportとImportDirに渡されるディレクトリは絶対である必要があります。 Dir string CgoEnabled bool UseAllFiles bool Compiler string // build、tool、およびrelease タグは、go:build 行の処理時に満たされていると考慮されるビルド制約を指定します。 // 新しいコンテキストを作成するクライアントは、BuildTags をカスタマイズすることができます。デフォルトは空ですが、ToolTags や ReleaseTags をカスタマイズすることは通常エラーです。 // ToolTags は、現在の Go ツールチェインの構成に適したビルドタグをデフォルトで持ちます。 // ReleaseTags は、現在のリリースが互換性のある Go のリリースの一覧をデフォルトで持ちます。 // BuildTags は、デフォルトのビルドコンテキストでは設定されません。 // BuildTags、ToolTags、ReleaseTags に加えて、ビルド制約は GOARCH と GOOS の値を満たしたタグとして考慮されます。 // ReleaseTags の最後の要素は現在のリリースと見なされます。 BuildTags []string ToolTags []string ReleaseTags []string // InstallSuffixは、インストールディレクトリの名前に使用する接尾辞を指定します。 // デフォルトでは空ですが、カスタムビルドでは出力を分離する必要がある場合にInstallSuffixを設定できます。 // たとえば、レースディテクタを使用する場合、goコマンドはInstallSuffix = "race"を使用するため、 // Linux/386システムでは、通常の「linux_386」の代わりに「linux_386_race」という名前のディレクトリにパッケージが書き込まれます。 InstallSuffix string // JoinPathはパスフラグメントのシーケンスを1つのパスに結合します。 // JoinPathがnilの場合、Importはfilepath.Joinを使用します。 JoinPath func(elem ...string) string // SplitPathList はパスリストを個々のパスのスライスに分割します。 // SplitPathList が nil の場合、Import は filepath.SplitList を使用します。 SplitPathList func(list string) []string // IsAbsPathは、パスが絶対パスかどうかを報告します。 // IsAbsPathがnilの場合、Importはfilepath.IsAbsを使用します。 IsAbsPath func(path string) bool // IsDirはパスがディレクトリかどうかを報告します。 // IsDirがnilの場合、Importはos.Statを呼び出し、結果のIsDirメソッドを使用します。 IsDir func(path string) bool // HasSubdirは、dirがrootの下位ディレクトリであるかどうかを報告します。 // 複数のレベル下位かもしれません。dirが存在するかどうかを確認しようとはしません。 // もしそうであれば、HasSubdirはrelをスラッシュで区切られたパスとして設定し、 // rootに結合してdirと同等のパスを生成することができます。 // HasSubdirがnilの場合、Importはfilepath.EvalSymlinksを基に実装されたものを使用します。 HasSubdir func(root, dir string) (rel string, ok bool) // ReadDirはディレクトリの内容を表すfs.FileInfoのスライスを名前でソートして返します。 // ReadDirがnilの場合、Importはos.ReadDirを使用します。 ReadDir func(dir string) ([]fs.FileInfo, error) // OpenFileは読み取り用にファイル(ディレクトリではありません)を開きます。 // OpenFileがnilの場合、Importはos.Openを使用します。 OpenFile func(path string) (io.ReadCloser, error) }
Contextは、ビルドのサポートコンテキストを指定します。
var Default Context = defaultContext()
Defaultはビルド用のデフォルトのContextです。 もし設定している場合は、GOARCH、GOOS、GOROOT、およびGOPATHの環境変数を使用します。 設定されていない場合は、コンパイルされたコードのGOARCH、GOOS、およびGOROOTが使用されます。
func (*Context) Import ¶
Importはimportパスによって指定されたGoパッケージについての詳細を返します。 srcDirディレクトリを基準として、ローカルなimportパスを解釈します。 もしパッケージが標準のimportパスを使用してインポート可能なローカルなパッケージの場合、返されるパッケージにはp.ImportPathがそのパスに設定されます。
パッケージを含むディレクトリでは、.go、.c、.h、および.sファイルはパッケージの一部と見なされますが、以下のものは除外されます:
- パッケージドキュメント内の.goファイル
- _または.で始まるファイル(おそらくエディタの一時ファイル)
- コンテキストで満たされないビルド制約を持つファイル
エラーが発生した場合、Importは非nilのエラーと部分的な情報を含む非nilの*Package を返します。
func (*Context) ImportDir ¶
func (ctxt *Context) ImportDir(dir string, mode ImportMode) (*Package, error)
ImportDirは、名前付きディレクトリで見つかったGoパッケージを処理する Import のようなものです。
type ImportMode ¶
type ImportMode uint
ImportModeはImportメソッドの動作を制御します。
const ( // FindOnlyが設定されている場合、Importはパッケージのソースが含まれるディレクトリを見つけた後に停止します。ディレクトリ内のファイルは読み込まれません。 FindOnly ImportMode = 1 << iota // AllowBinaryが設定されている場合、対応するソースコードなしでコンパイル済みのパッケージオブジェクトでImportを満たすことができます。 // // 廃止予定: // コンパイルのみのパッケージを作成するサポートされる方法は、ファイルの先頭に//go:binary-only-packageコメントを含むソースコードを書くことです。このようなパッケージは、このフラグの設定に関係なく認識されます(ソースコードを持っているので)し、戻り値のパッケージにBinaryOnlyフラグがtrueで設定されます。 AllowBinary // ImportCommentが設定されている場合、パッケージ文のimportコメントを解析します。 // もし理解できないコメントが見つかるか、複数のソースファイルで矛盾するコメントが見つかった場合、エラーが返されます。 // 詳細はgolang.org/s/go14customimportを参照してください。 ImportComment // デフォルトでは、Importは指定されたソースディレクトリ内のベンダーディレクトリを検索します。 // GOROOTとGOPATHのルートを検索する前に適用されるベンダーディレクトリを検索します。 // もしImportがベンダーディレクトリを見つけてパッケージを返す場合、返されるImportPathは完全なパスです。 // "vendor"までのパス要素を含み、"vendor"自体を含むパッケージのパスです。 // 例えば、Import("y", "x/subdir", 0)が"x/vendor/y"を見つけた場合、返されるパッケージのImportPathは"x/vendor/y"です。 // 単純に"y"ではありません。 // 詳細については、golang.org/s/go15vendorを参照してください。 // // IgnoreVendorを設定すると、ベンダーディレクトリは無視されます。 // // パッケージのImportPathとは異なり、返されるパッケージのImports、TestImports、およびXTestImportsは常にソースファイルからの正確なインポートパスです。 // Importはこれらのパスを解決したり確認したりする試みはしません。 IgnoreVendor )
type MultiplePackageError ¶ added in v1.4.0
func (*MultiplePackageError) Error ¶ added in v1.4.0
func (e *MultiplePackageError) Error() string
type NoGoError ¶
type NoGoError struct {
Dir string
}
NoGoErrorは、ビルド可能なGoソースファイルが含まれていないディレクトリを説明するために Import で使用されるエラーです。(テストファイル、ビルドタグによって非表示にされたファイルなどは含まれる可能性があります。)
type Package ¶
type Package struct { Dir string Name string ImportComment string Doc string ImportPath string Root string SrcRoot string PkgRoot string PkgTargetRoot string BinDir string Goroot bool PkgObj string AllTags []string ConflictDir string BinaryOnly bool // ソースファイル GoFiles []string CgoFiles []string IgnoredGoFiles []string InvalidGoFiles []string IgnoredOtherFiles []string CFiles []string CXXFiles []string MFiles []string HFiles []string FFiles []string SFiles []string SwigFiles []string SwigCXXFiles []string SysoFiles []string // Cgoの指令 CgoCFLAGS []string CgoCPPFLAGS []string CgoCXXFLAGS []string CgoFFLAGS []string CgoLDFLAGS []string CgoPkgConfig []string // テスト情報 TestGoFiles []string XTestGoFiles []string // ソースファイル内で見つかったGoディレクティブコメント(//go:zzz...)。 Directives []Directive TestDirectives []Directive XTestDirectives []Directive // 依存関係情報 Imports []string ImportPos map[string][]token.Position TestImports []string TestImportPos map[string][]token.Position XTestImports []string XTestImportPos map[string][]token.Position // //go:embed はGoのソースファイル内で見つかるパターンです。 // 例えば、ソースファイルに次のように記述されている場合、 // //go:embed a* b.c // このリストはそれぞれの文字列を別々のエントリとして含んでいます。 // (//go:embedについての詳細はパッケージembedを参照してください。) EmbedPatterns []string EmbedPatternPos map[string][]token.Position TestEmbedPatterns []string TestEmbedPatternPos map[string][]token.Position XTestEmbedPatterns []string XTestEmbedPatternPos map[string][]token.Position }
パッケージは、ディレクトリにあるGoパッケージを説明します。
func Import ¶
func Import(path, srcDir string, mode ImportMode) (*Package, error)
Import は Default.Import の略記法です。
Directories
¶
Path | Synopsis |
---|---|
Package constraintはビルド制約行の解析と評価を実装しています。
|
Package constraintはビルド制約行の解析と評価を実装しています。 |