...
Run Format

Source file src/go/build/doc.go

Documentation: go/build

  // 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 build gathers information about Go packages.
  //
  // Go Path
  //
  // The Go path is a list of directory trees containing Go source code.
  // It is consulted to resolve imports that cannot be found in the standard
  // Go tree. The default path is the value of the GOPATH environment
  // variable, interpreted as a path list appropriate to the operating system
  // (on Unix, the variable is a colon-separated string;
  // on Windows, a semicolon-separated string;
  // on Plan 9, a list).
  //
  // Each directory listed in the Go path must have a prescribed structure:
  //
  // The src/ directory holds source code. The path below 'src' determines
  // the import path or executable name.
  //
  // The pkg/ directory holds installed package objects.
  // As in the Go tree, each target operating system and
  // architecture pair has its own subdirectory of pkg
  // (pkg/GOOS_GOARCH).
  //
  // If DIR is a directory listed in the Go path, a package with
  // source in DIR/src/foo/bar can be imported as "foo/bar" and
  // has its compiled form installed to "DIR/pkg/GOOS_GOARCH/foo/bar.a"
  // (or, for gccgo, "DIR/pkg/gccgo/foo/libbar.a").
  //
  // The bin/ directory holds compiled commands.
  // Each command is named for its source directory, but only
  // using the final element, not the entire path. That is, the
  // command with source in DIR/src/foo/quux is installed into
  // DIR/bin/quux, not DIR/bin/foo/quux. The foo/ is stripped
  // so that you can add DIR/bin to your PATH to get at the
  // installed commands.
  //
  // Here's an example directory layout:
  //
  //	GOPATH=/home/user/gocode
  //
  //	/home/user/gocode/
  //	    src/
  //	        foo/
  //	            bar/               (go code in package bar)
  //	                x.go
  //	            quux/              (go code in package main)
  //	                y.go
  //	    bin/
  //	        quux                   (installed command)
  //	    pkg/
  //	        linux_amd64/
  //	            foo/
  //	                bar.a          (installed package object)
  //
  // Build Constraints
  //
  // A build constraint, also known as a build tag, is a line comment that begins
  //
  //	// +build
  //
  // that lists the conditions under which a file should be included in the package.
  // Constraints may appear in any kind of source file (not just Go), but
  // they must appear near the top of the file, preceded
  // only by blank lines and other line comments. These rules mean that in Go
  // files a build constraint must appear before the package clause.
  //
  // To distinguish build constraints from package documentation, a series of
  // build constraints must be followed by a blank line.
  //
  // A build constraint is evaluated as the OR of space-separated options;
  // each option evaluates as the AND of its comma-separated terms;
  // and each term is an alphanumeric word or, preceded by !, its negation.
  // That is, the build constraint:
  //
  //	// +build linux,386 darwin,!cgo
  //
  // corresponds to the boolean formula:
  //
  //	(linux AND 386) OR (darwin AND (NOT cgo))
  //
  // A file may have multiple build constraints. The overall constraint is the AND
  // of the individual constraints. That is, the build constraints:
  //
  //	// +build linux darwin
  //	// +build 386
  //
  // corresponds to the boolean formula:
  //
  //	(linux OR darwin) AND 386
  //
  // During a particular build, the following words are satisfied:
  //
  //	- the target operating system, as spelled by runtime.GOOS
  //	- the target architecture, as spelled by runtime.GOARCH
  //	- the compiler being used, either "gc" or "gccgo"
  //	- "cgo", if ctxt.CgoEnabled is true
  //	- "go1.1", from Go version 1.1 onward
  //	- "go1.2", from Go version 1.2 onward
  //	- "go1.3", from Go version 1.3 onward
  //	- "go1.4", from Go version 1.4 onward
  //	- "go1.5", from Go version 1.5 onward
  //	- "go1.6", from Go version 1.6 onward
  //	- "go1.7", from Go version 1.7 onward
  //	- "go1.8", from Go version 1.8 onward
  //	- "go1.9", from Go version 1.9 onward
  //	- any additional words listed in ctxt.BuildTags
  //
  // If a file's name, after stripping the extension and a possible _test suffix,
  // matches any of the following patterns:
  //	*_GOOS
  // 	*_GOARCH
  // 	*_GOOS_GOARCH
  // (example: source_windows_amd64.go) where GOOS and GOARCH represent
  // any known operating system and architecture values respectively, then
  // the file is considered to have an implicit build constraint requiring
  // those terms (in addition to any explicit constraints in the file).
  //
  // To keep a file from being considered for the build:
  //
  //	// +build ignore
  //
  // (any other unsatisfied word will work as well, but ``ignore'' is conventional.)
  //
  // To build a file only when using cgo, and only on Linux and OS X:
  //
  //	// +build linux,cgo darwin,cgo
  //
  // Such a file is usually paired with another file implementing the
  // default functionality for other systems, which in this case would
  // carry the constraint:
  //
  //	// +build !linux,!darwin !cgo
  //
  // Naming a file dns_windows.go will cause it to be included only when
  // building the package for Windows; similarly, math_386.s will be included
  // only when building the package for 32-bit x86.
  //
  // Using GOOS=android matches build tags and files as for GOOS=linux
  // in addition to android tags and files.
  //
  // Binary-Only Packages
  //
  // It is possible to distribute packages in binary form without including the
  // source code used for compiling the package. To do this, the package must
  // be distributed with a source file not excluded by build constraints and
  // containing a "//go:binary-only-package" comment.
  // Like a build constraint, this comment must appear near the top of the file,
  // preceded only by blank lines and other line comments and with a blank line
  // following the comment, to separate it from the package documentation.
  // Unlike build constraints, this comment is only recognized in non-test
  // Go source files.
  //
  // The minimal source code for a binary-only package is therefore:
  //
  //	//go:binary-only-package
  //
  //	package mypkg
  //
  // The source code may include additional Go code. That code is never compiled
  // but will be processed by tools like godoc and might be useful as end-user
  // documentation.
  //
  package build
  

View as plain text