github.com/stingnevermore/go@v0.0.0-20180120041312-3810f5bfed72/doc/install-source.html (about)

     1  <!--{
     2  	"Title": "Installing Go from source",
     3  	"Path": "/doc/install/source"
     4  }-->
     5  
     6  <h2 id="introduction">Introduction</h2>
     7  
     8  <p>
     9  Go is an open source project, distributed under a
    10  <a href="/LICENSE">BSD-style license</a>.
    11  This document explains how to check out the sources,
    12  build them on your own machine, and run them.
    13  </p>
    14  
    15  <p>
    16  Most users don't need to do this, and will instead install
    17  from precompiled binary packages as described in
    18  <a href="/doc/install">Getting Started</a>,
    19  a much simpler process.
    20  If you want to help develop what goes into those precompiled
    21  packages, though, read on.
    22  </p>
    23  
    24  <div class="detail">
    25  
    26  <p>
    27  There are two official Go compiler toolchains.
    28  This document focuses on the <code>gc</code> Go
    29  compiler and tools.
    30  For information on how to work on <code>gccgo</code>, a more traditional
    31  compiler using the GCC back end, see
    32  <a href="/doc/install/gccgo">Setting up and using gccgo</a>.
    33  </p>
    34  
    35  <p>
    36  The Go compilers support eight instruction sets.
    37  There are important differences in the quality of the compilers for the different
    38  architectures.
    39  </p>
    40  
    41  <dl>
    42  <dt>
    43  	<code>amd64</code> (also known as <code>x86-64</code>)
    44  </dt>
    45  <dd>
    46  	A mature implementation.
    47  </dd>
    48  <dt>
    49  	<code>386</code> (<code>x86</code> or <code>x86-32</code>)
    50  </dt>
    51  <dd>
    52  	Comparable to the <code>amd64</code> port.
    53  </dd>
    54  <dt>
    55  	<code>arm</code> (<code>ARM</code>)
    56  </dt>
    57  <dd>
    58  	Supports Linux, FreeBSD, NetBSD, OpenBSD and Darwin binaries. Less widely used than the other ports.
    59  </dd>
    60  <dt>
    61  	<code>arm64</code> (<code>AArch64</code>)
    62  </dt>
    63  <dd>
    64  	Supports Linux and Darwin binaries. New in 1.5 and not as well exercised as other ports.
    65  </dd>
    66  <dt>
    67  	<code>ppc64, ppc64le</code> (64-bit PowerPC big- and little-endian)
    68  </dt>
    69  <dd>
    70  	Supports Linux binaries. New in 1.5 and not as well exercised as other ports.
    71  </dd>
    72  <dt>
    73  	<code>mips, mipsle</code> (32-bit MIPS big- and little-endian)
    74  </dt>
    75  <dd>
    76  	Supports Linux binaries. New in 1.8 and not as well exercised as other ports.
    77  </dd>
    78  <dt>
    79  	<code>mips64, mips64le</code> (64-bit MIPS big- and little-endian)
    80  </dt>
    81  <dd>
    82  	Supports Linux binaries. New in 1.6 and not as well exercised as other ports.
    83  </dd>
    84  <dt>
    85  	<code>s390x</code> (IBM System z)
    86  </dt>
    87  <dd>
    88  	Supports Linux binaries. New in 1.7 and not as well exercised as other ports.
    89  </dd>
    90  </dl>
    91  
    92  <p>
    93  Except for things like low-level operating system interface code, the run-time
    94  support is the same in all ports and includes a mark-and-sweep garbage
    95  collector, efficient array and string slicing, and support for efficient
    96  goroutines, such as stacks that grow and shrink on demand.
    97  </p>
    98  
    99  <p>
   100  The compilers can target the DragonFly BSD, FreeBSD, Linux, NetBSD, OpenBSD,
   101  OS X (Darwin), Plan 9, Solaris and Windows operating systems.
   102  The full set of supported combinations is listed in the discussion of
   103  <a href="#environment">environment variables</a> below.
   104  </p>
   105  
   106  <p>
   107  See the main installation page for the <a href="/doc/install#requirements">overall system requirements</a>.
   108  The following additional constraints apply to systems that can be built only from source:
   109  </p>
   110  
   111  <ul>
   112  <li>For Linux on PowerPC 64-bit, the minimum supported kernel version is 2.6.37, meaning that
   113  Go does not support CentOS 6 on these systems.
   114  </li>
   115  </ul>
   116  
   117  </div>
   118  
   119  <h2 id="go14">Install Go compiler binaries</h2>
   120  
   121  <p>
   122  The Go toolchain is written in Go. To build it, you need a Go compiler installed.
   123  The scripts that do the initial build of the tools look for an existing Go tool
   124  chain in <code>$GOROOT_BOOTSTRAP</code>.
   125  If unset, the default value of <code>GOROOT_BOOTSTRAP</code>
   126  is <code>$HOME/go1.4</code>.
   127  </p>
   128  
   129  <p>
   130  There are many options for the bootstrap toolchain.
   131  After obtaining one, set <code>GOROOT_BOOTSTRAP</code> to the
   132  directory containing the unpacked tree.
   133  For example, <code>$GOROOT_BOOTSTRAP/bin/go</code> should be
   134  the <code>go</code> command binary for the bootstrap toolchain.
   135  </p>
   136  
   137  <p>
   138  To use a binary release as a bootstrap toolchain, see
   139  <a href="/dl/">the downloads page</a> or use any other
   140  packaged Go distribution.
   141  </p>
   142  
   143  <p>
   144  To build a bootstrap toolchain from source, use
   145  either the git branch <code>release-branch.go1.4</code> or
   146  <a href="https://dl.google.com/go/go1.4-bootstrap-20171003.tar.gz">go1.4-bootstrap-20171003.tar.gz</a>,
   147  which contains the Go 1.4 source code plus accumulated fixes
   148  to keep the tools running on newer operating systems.
   149  (Go 1.4 was the last distribution in which the toolchain was written in C.)
   150  After unpacking the Go 1.4 source, <code>cd</code> to
   151  the <code>src</code> subdirectory, set <code>CGO_ENABLED=0</code> in
   152  the environment, and run <code>make.bash</code> (or,
   153  on Windows, <code>make.bat</code>).
   154  </p>
   155  
   156  <p>
   157  To cross-compile a bootstrap toolchain from source, which is
   158  necessary on systems Go 1.4 did not target (for
   159  example, <code>linux/ppc64le</code>), install Go on a different system
   160  and run <a href="/src/bootstrap.bash">bootstrap.bash</a>.
   161  </p>
   162  
   163  <p>
   164  When run as (for example)
   165  </p>
   166  
   167  <pre>
   168  $ GOOS=linux GOARCH=ppc64 ./bootstrap.bash
   169  </pre>
   170  
   171  <p>
   172  <code>bootstrap.bash</code> cross-compiles a toolchain for that <code>GOOS/GOARCH</code>
   173  combination, leaving the resulting tree in <code>../../go-${GOOS}-${GOARCH}-bootstrap</code>.
   174  That tree can be copied to a machine of the given target type
   175  and used as <code>GOROOT_BOOTSTRAP</code> to bootstrap a local build.
   176  </p>
   177  
   178  <p>
   179  To use gccgo as the bootstrap toolchain, you need to arrange
   180  for <code>$GOROOT_BOOTSTRAP/bin/go</code> to be the go tool that comes
   181  as part of gccgo 5. For example on Ubuntu Vivid:
   182  </p>
   183  
   184  <pre>
   185  $ sudo apt-get install gccgo-5
   186  $ sudo update-alternatives --set go /usr/bin/go-5
   187  $ GOROOT_BOOTSTRAP=/usr ./make.bash
   188  </pre>
   189  
   190  <h2 id="git">Install Git, if needed</h2>
   191  
   192  <p>
   193  To perform the next step you must have Git installed. (Check that you
   194  have a <code>git</code> command before proceeding.)
   195  </p>
   196  
   197  <p>
   198  If you do not have a working Git installation,
   199  follow the instructions on the
   200  <a href="http://git-scm.com/downloads">Git downloads</a> page.
   201  </p>
   202  
   203  <h2 id="ccompiler">(Optional) Install a C compiler</h2>
   204  
   205  <p>
   206  To build a Go installation
   207  with <code><a href="/cmd/cgo">cgo</a></code> support, which permits Go
   208  programs to import C libraries, a C compiler such as <code>gcc</code>
   209  or <code>clang</code> must be installed first. Do this using whatever
   210  installation method is standard on the system.
   211  </p>
   212  
   213  <p>
   214  To build without <code>cgo</code>, set the environment variable
   215  <code>CGO_ENABLED=0</code> before running <code>all.bash</code> or
   216  <code>make.bash</code>.
   217  </p>
   218  
   219  <h2 id="fetch">Fetch the repository</h2>
   220  
   221  <p>Go will install to a directory named <code>go</code>.
   222  Change to the directory that will be its parent
   223  and make sure the <code>go</code> directory does not exist.
   224  Then clone the repository and check out the latest release tag
   225  (<code class="versionTag">go1.9</code>, for example):</p>
   226  
   227  <pre>
   228  $ git clone https://go.googlesource.com/go
   229  $ cd go
   230  $ git checkout <span class="versionTag"><i>&lt;tag&gt;</i></span>
   231  </pre>
   232  
   233  <p class="whereTag">
   234  Where <code>&lt;tag&gt;</code> is the version string of the release.
   235  </p>
   236  
   237  <h2 id="head">(Optional) Switch to the master branch</h2>
   238  
   239  <p>If you intend to modify the go source code, and
   240  <a href="/doc/contribute.html">contribute your changes</a>
   241  to the project, then move your repository
   242  off the release branch, and onto the master (development) branch.
   243  Otherwise, skip this step.</p>
   244  
   245  <pre>
   246  $ git checkout master
   247  </pre>
   248  
   249  <h2 id="install">Install Go</h2>
   250  
   251  <p>
   252  To build the Go distribution, run
   253  </p>
   254  
   255  <pre>
   256  $ cd src
   257  $ ./all.bash
   258  </pre>
   259  
   260  <p>
   261  (To build under Windows use <code>all.bat</code>.)
   262  </p>
   263  
   264  <p>
   265  If all goes well, it will finish by printing output like:
   266  </p>
   267  
   268  <pre>
   269  ALL TESTS PASSED
   270  
   271  ---
   272  Installed Go for linux/amd64 in /home/you/go.
   273  Installed commands in /home/you/go/bin.
   274  *** You need to add /home/you/go/bin to your $PATH. ***
   275  </pre>
   276  
   277  <p>
   278  where the details on the last few lines reflect the operating system,
   279  architecture, and root directory used during the install.
   280  </p>
   281  
   282  <div class="detail">
   283  <p>
   284  For more information about ways to control the build, see the discussion of
   285  <a href="#environment">environment variables</a> below.
   286  <code>all.bash</code> (or <code>all.bat</code>) runs important tests for Go,
   287  which can take more time than simply building Go. If you do not want to run
   288  the test suite use <code>make.bash</code> (or <code>make.bat</code>)
   289  instead.
   290  </p>
   291  </div>
   292  
   293  
   294  <h2 id="testing">Testing your installation</h2>
   295  
   296  <p>
   297  Check that Go is installed correctly by building a simple program.
   298  </p>
   299  
   300  <p>
   301  Create a file named <code>hello.go</code> and put the following program in it:
   302  </p>
   303  
   304  <pre>
   305  package main
   306  
   307  import "fmt"
   308  
   309  func main() {
   310      fmt.Printf("hello, world\n")
   311  }
   312  </pre>
   313  
   314  <p>
   315  Then run it with the <code>go</code> tool:
   316  </p>
   317  
   318  <pre>
   319  $ go run hello.go
   320  hello, world
   321  </pre>
   322  
   323  <p>
   324  If you see the "hello, world" message then Go is installed correctly.
   325  </p>
   326  
   327  <h2 id="gopath">Set up your work environment</h2>
   328  
   329  <p>
   330  You're almost done.
   331  You just need to do a little more setup.
   332  </p>
   333  
   334  <p>
   335  <a href="/doc/code.html" class="download" id="start">
   336  <span class="big">How to Write Go Code</span>
   337  <span class="desc">Learn how to set up and use the Go tools</span>
   338  </a>
   339  </p>
   340  
   341  <p>
   342  The <a href="/doc/code.html">How to Write Go Code</a> document
   343  provides <b>essential setup instructions</b> for using the Go tools.
   344  </p>
   345  
   346  
   347  <h2 id="tools">Install additional tools</h2>
   348  
   349  <p>
   350  The source code for several Go tools (including <a href="/cmd/godoc/">godoc</a>)
   351  is kept in <a href="https://golang.org/x/tools">the go.tools repository</a>.
   352  To install all of them, run the <code>go</code> <code>get</code> command:
   353  </p>
   354  
   355  <pre>
   356  $ go get golang.org/x/tools/cmd/...
   357  </pre>
   358  
   359  <p>
   360  Or if you just want to install a specific command (<code>godoc</code> in this case):
   361  </p>
   362  
   363  <pre>
   364  $ go get golang.org/x/tools/cmd/godoc
   365  </pre>
   366  
   367  <p>
   368  To install these tools, the <code>go</code> <code>get</code> command requires
   369  that <a href="#git">Git</a> be installed locally.
   370  </p>
   371  
   372  <p>
   373  You must also have a workspace (<code>GOPATH</code>) set up;
   374  see <a href="/doc/code.html">How to Write Go Code</a> for the details.
   375  </p>
   376  
   377  <p>
   378  <b>Note</b>: The <code>go</code> command will install the <code>godoc</code>
   379  binary to <code>$GOROOT/bin</code> (or <code>$GOBIN</code>) and the
   380  <code>cover</code> and <code>vet</code> binaries to
   381  <code>$GOROOT/pkg/tool/$GOOS_$GOARCH</code>.
   382  You can access the latter commands with
   383  "<code>go</code> <code>tool</code> <code>cover</code>" and
   384  "<code>go</code> <code>tool</code> <code>vet</code>".
   385  </p>
   386  
   387  <h2 id="community">Community resources</h2>
   388  
   389  <p>
   390  The usual community resources such as
   391  <code>#go-nuts</code> on the <a href="http://freenode.net/">Freenode</a> IRC server
   392  and the
   393  <a href="//groups.google.com/group/golang-nuts">Go Nuts</a>
   394  mailing list have active developers that can help you with problems
   395  with your installation or your development work.
   396  For those who wish to keep up to date,
   397  there is another mailing list, <a href="//groups.google.com/group/golang-checkins">golang-checkins</a>,
   398  that receives a message summarizing each checkin to the Go repository.
   399  </p>
   400  
   401  <p>
   402  Bugs can be reported using the <a href="//golang.org/issue/new">Go issue tracker</a>.
   403  </p>
   404  
   405  
   406  <h2 id="releases">Keeping up with releases</h2>
   407  
   408  <p>
   409  New releases are announced on the
   410  <a href="//groups.google.com/group/golang-announce">golang-announce</a>
   411  mailing list.
   412  Each announcement mentions the latest release tag, for instance,
   413  <code class="versionTag">go1.9</code>.
   414  </p>
   415  
   416  <p>
   417  To update an existing tree to the latest release, you can run:
   418  </p>
   419  
   420  <pre>
   421  $ cd go/src
   422  $ git fetch
   423  $ git checkout <span class="versionTag"><i>&lt;tag&gt;</i></psan>
   424  $ ./all.bash
   425  </pre>
   426  
   427  <p class="whereTag">
   428  Where <code>&lt;tag&gt;</code> is the version string of the release.
   429  </p>
   430  
   431  
   432  <h2 id="environment">Optional environment variables</h2>
   433  
   434  <p>
   435  The Go compilation environment can be customized by environment variables.
   436  <i>None is required by the build</i>, but you may wish to set some
   437  to override the defaults.
   438  </p>
   439  
   440  <ul>
   441  <li><code>$GOROOT</code>
   442  <p>
   443  The root of the Go tree, often <code>$HOME/go1.X</code>.
   444  Its value is built into the tree when it is compiled, and
   445  defaults to the parent of the directory where <code>all.bash</code> was run.
   446  There is no need to set this unless you want to switch between multiple
   447  local copies of the repository.
   448  </p>
   449  
   450  <li><code>$GOROOT_FINAL</code>
   451  <p>
   452  The value assumed by installed binaries and scripts when
   453  <code>$GOROOT</code> is not set explicitly.
   454  It defaults to the value of <code>$GOROOT</code>.
   455  If you want to build the Go tree in one location
   456  but move it elsewhere after the build, set
   457  <code>$GOROOT_FINAL</code> to the eventual location.
   458  </p>
   459  
   460  <li><code>$GOOS</code> and <code>$GOARCH</code>
   461  <p>
   462  The name of the target operating system and compilation architecture.
   463  These default to the values of <code>$GOHOSTOS</code> and
   464  <code>$GOHOSTARCH</code> respectively (described below).
   465  
   466  <p>
   467  Choices for <code>$GOOS</code> are
   468  <code>darwin</code> (Mac OS X 10.8 and above and iOS), <code>dragonfly</code>, <code>freebsd</code>,
   469  <code>linux</code>, <code>netbsd</code>, <code>openbsd</code>,
   470  <code>plan9</code>, <code>solaris</code> and <code>windows</code>.
   471  Choices for <code>$GOARCH</code> are
   472  <code>amd64</code> (64-bit x86, the most mature port),
   473  <code>386</code> (32-bit x86), <code>arm</code> (32-bit ARM), <code>arm64</code> (64-bit ARM),
   474  <code>ppc64le</code> (PowerPC 64-bit, little-endian), <code>ppc64</code> (PowerPC 64-bit, big-endian),
   475  <code>mips64le</code> (MIPS 64-bit, little-endian), <code>mips64</code> (MIPS 64-bit, big-endian),
   476  <code>mipsle</code> (MIPS 32-bit, little-endian), <code>mips</code> (MIPS 32-bit, big-endian), and
   477  <code>s390x</code> (IBM System z 64-bit, big-endian).
   478  The valid combinations of <code>$GOOS</code> and <code>$GOARCH</code> are:
   479  <table cellpadding="0">
   480  <tr>
   481  <th width="50"></th><th align="left" width="100"><code>$GOOS</code></th> <th align="left" width="100"><code>$GOARCH</code></th>
   482  </tr>
   483  <tr>
   484  <td></td><td><code>android</code></td> <td><code>arm</code></td>
   485  </tr>
   486  <tr>
   487  <td></td><td><code>darwin</code></td> <td><code>386</code></td>
   488  </tr>
   489  <tr>
   490  <td></td><td><code>darwin</code></td> <td><code>amd64</code></td>
   491  </tr>
   492  <tr>
   493  <td></td><td><code>darwin</code></td> <td><code>arm</code></td>
   494  </tr>
   495  <tr>
   496  <td></td><td><code>darwin</code></td> <td><code>arm64</code></td>
   497  </tr>
   498  <tr>
   499  <td></td><td><code>dragonfly</code></td> <td><code>amd64</code></td>
   500  </tr>
   501  <tr>
   502  <td></td><td><code>freebsd</code></td> <td><code>386</code></td>
   503  </tr>
   504  <tr>
   505  <td></td><td><code>freebsd</code></td> <td><code>amd64</code></td>
   506  </tr>
   507  <tr>
   508  <td></td><td><code>freebsd</code></td> <td><code>arm</code></td>
   509  </tr>
   510  <tr>
   511  <td></td><td><code>linux</code></td> <td><code>386</code></td>
   512  </tr>
   513  <tr>
   514  <td></td><td><code>linux</code></td> <td><code>amd64</code></td>
   515  </tr>
   516  <tr>
   517  <td></td><td><code>linux</code></td> <td><code>arm</code></td>
   518  </tr>
   519  <tr>
   520  <td></td><td><code>linux</code></td> <td><code>arm64</code></td>
   521  </tr>
   522  <tr>
   523  <td></td><td><code>linux</code></td> <td><code>ppc64</code></td>
   524  </tr>
   525  <tr>
   526  <td></td><td><code>linux</code></td> <td><code>ppc64le</code></td>
   527  </tr>
   528  <tr>
   529  <td></td><td><code>linux</code></td> <td><code>mips</code></td>
   530  </tr>
   531  <tr>
   532  <td></td><td><code>linux</code></td> <td><code>mipsle</code></td>
   533  </tr>
   534  <tr>
   535  <td></td><td><code>linux</code></td> <td><code>mips64</code></td>
   536  </tr>
   537  <tr>
   538  <td></td><td><code>linux</code></td> <td><code>mips64le</code></td>
   539  </tr>
   540  <tr>
   541  <td></td><td><code>linux</code></td> <td><code>s390x</code></td>
   542  </tr>
   543  <tr>
   544  <td></td><td><code>netbsd</code></td> <td><code>386</code></td>
   545  </tr>
   546  <tr>
   547  <td></td><td><code>netbsd</code></td> <td><code>amd64</code></td>
   548  </tr>
   549  <tr>
   550  <td></td><td><code>netbsd</code></td> <td><code>arm</code></td>
   551  </tr>
   552  <tr>
   553  <td></td><td><code>openbsd</code></td> <td><code>386</code></td>
   554  </tr>
   555  <tr>
   556  <td></td><td><code>openbsd</code></td> <td><code>amd64</code></td>
   557  </tr>
   558  <tr>
   559  <td></td><td><code>openbsd</code></td> <td><code>arm</code></td>
   560  </tr>
   561  <tr>
   562  <td></td><td><code>plan9</code></td> <td><code>386</code></td>
   563  </tr>
   564  <tr>
   565  <td></td><td><code>plan9</code></td> <td><code>amd64</code></td>
   566  </tr>
   567  <tr>
   568  <td></td><td><code>solaris</code></td> <td><code>amd64</code></td>
   569  </tr>
   570  <tr>
   571  <td></td><td><code>windows</code></td> <td><code>386</code></td>
   572  </tr>
   573  <tr>
   574  <td></td><td><code>windows</code></td> <td><code>amd64</code></td>
   575  </tr>
   576  </table>
   577  <br>
   578  
   579  <li><code>$GOHOSTOS</code> and <code>$GOHOSTARCH</code>
   580  <p>
   581  The name of the host operating system and compilation architecture.
   582  These default to the local system's operating system and
   583  architecture.
   584  </p>
   585  
   586  <p>
   587  Valid choices are the same as for <code>$GOOS</code> and
   588  <code>$GOARCH</code>, listed above.
   589  The specified values must be compatible with the local system.
   590  For example, you should not set <code>$GOHOSTARCH</code> to
   591  <code>arm</code> on an x86 system.
   592  </p>
   593  
   594  <li><code>$GOBIN</code>
   595  <p>
   596  The location where Go binaries will be installed.
   597  The default is <code>$GOROOT/bin</code>.
   598  After installing, you will want to arrange to add this
   599  directory to your <code>$PATH</code>, so you can use the tools.
   600  If <code>$GOBIN</code> is set, the <a href="/cmd/go">go command</a>
   601  installs all commands there.
   602  </p>
   603  
   604  <li><code>$GO386</code> (for <code>386</code> only, default is auto-detected
   605  if built on either <code>386</code> or <code>amd64</code>, <code>387</code> otherwise)
   606  <p>
   607  This controls the code generated by gc to use either the 387 floating-point unit
   608  (set to <code>387</code>) or SSE2 instructions (set to <code>sse2</code>) for
   609  floating point computations.
   610  </p>
   611  <ul>
   612  	<li><code>GO386=387</code>: use x87 for floating point operations; should support all x86 chips (Pentium MMX or later).
   613  	<li><code>GO386=sse2</code>: use SSE2 for floating point operations; has better performance than 387, but only available on Pentium 4/Opteron/Athlon 64 or later.
   614  </ul>
   615  
   616  <li><code>$GOARM</code> (for <code>arm</code> only; default is auto-detected if building
   617  on the target processor, 6 if not)
   618  <p>
   619  This sets the ARM floating point co-processor architecture version the run-time
   620  should target. If you are compiling on the target system, its value will be auto-detected.
   621  </p>
   622  <ul>
   623  	<li><code>GOARM=5</code>: use software floating point; when CPU doesn't have VFP co-processor
   624  	<li><code>GOARM=6</code>: use VFPv1 only; default if cross compiling; usually ARM11 or better cores (VFPv2 or better is also supported)
   625  	<li><code>GOARM=7</code>: use VFPv3; usually Cortex-A cores
   626  </ul>
   627  <p>
   628  If in doubt, leave this variable unset, and adjust it if required
   629  when you first run the Go executable.
   630  The <a href="//golang.org/wiki/GoArm">GoARM</a> page
   631  on the <a href="//golang.org/wiki">Go community wiki</a>
   632  contains further details regarding Go's ARM support.
   633  </p>
   634  
   635  </ul>
   636  
   637  <p>
   638  Note that <code>$GOARCH</code> and <code>$GOOS</code> identify the
   639  <em>target</em> environment, not the environment you are running on.
   640  In effect, you are always cross-compiling.
   641  By architecture, we mean the kind of binaries
   642  that the target environment can run:
   643  an x86-64 system running a 32-bit-only operating system
   644  must set <code>GOARCH</code> to <code>386</code>,
   645  not <code>amd64</code>.
   646  </p>
   647  
   648  <p>
   649  If you choose to override the defaults,
   650  set these variables in your shell profile (<code>$HOME/.bashrc</code>,
   651  <code>$HOME/.profile</code>, or equivalent). The settings might look
   652  something like this:
   653  </p>
   654  
   655  <pre>
   656  export GOROOT=$HOME/go1.X
   657  export GOARCH=amd64
   658  export GOOS=linux
   659  </pre>
   660  
   661  <p>
   662  although, to reiterate, none of these variables needs to be set to build,
   663  install, and develop the Go tree.
   664  </p>