github.com/yukk001/go1.10.8@v0.0.0-20190813125351-6df2d3982e20/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  </li>
   450  
   451  <li><code>$GOROOT_FINAL</code>
   452  <p>
   453  The value assumed by installed binaries and scripts when
   454  <code>$GOROOT</code> is not set explicitly.
   455  It defaults to the value of <code>$GOROOT</code>.
   456  If you want to build the Go tree in one location
   457  but move it elsewhere after the build, set
   458  <code>$GOROOT_FINAL</code> to the eventual location.
   459  </p>
   460  </li>
   461  
   462  <li><code>$GOOS</code> and <code>$GOARCH</code>
   463  <p>
   464  The name of the target operating system and compilation architecture.
   465  These default to the values of <code>$GOHOSTOS</code> and
   466  <code>$GOHOSTARCH</code> respectively (described below).
   467  </li>
   468  
   469  <p>
   470  Choices for <code>$GOOS</code> are
   471  <code>darwin</code> (Mac OS X 10.8 and above and iOS), <code>dragonfly</code>, <code>freebsd</code>,
   472  <code>linux</code>, <code>netbsd</code>, <code>openbsd</code>,
   473  <code>plan9</code>, <code>solaris</code> and <code>windows</code>.
   474  Choices for <code>$GOARCH</code> are
   475  <code>amd64</code> (64-bit x86, the most mature port),
   476  <code>386</code> (32-bit x86), <code>arm</code> (32-bit ARM), <code>arm64</code> (64-bit ARM),
   477  <code>ppc64le</code> (PowerPC 64-bit, little-endian), <code>ppc64</code> (PowerPC 64-bit, big-endian),
   478  <code>mips64le</code> (MIPS 64-bit, little-endian), <code>mips64</code> (MIPS 64-bit, big-endian),
   479  <code>mipsle</code> (MIPS 32-bit, little-endian), <code>mips</code> (MIPS 32-bit, big-endian), and
   480  <code>s390x</code> (IBM System z 64-bit, big-endian).
   481  The valid combinations of <code>$GOOS</code> and <code>$GOARCH</code> are:
   482  <table cellpadding="0">
   483  <tr>
   484  <th width="50"></th><th align="left" width="100"><code>$GOOS</code></th> <th align="left" width="100"><code>$GOARCH</code></th>
   485  </tr>
   486  <tr>
   487  <td></td><td><code>android</code></td> <td><code>arm</code></td>
   488  </tr>
   489  <tr>
   490  <td></td><td><code>darwin</code></td> <td><code>386</code></td>
   491  </tr>
   492  <tr>
   493  <td></td><td><code>darwin</code></td> <td><code>amd64</code></td>
   494  </tr>
   495  <tr>
   496  <td></td><td><code>darwin</code></td> <td><code>arm</code></td>
   497  </tr>
   498  <tr>
   499  <td></td><td><code>darwin</code></td> <td><code>arm64</code></td>
   500  </tr>
   501  <tr>
   502  <td></td><td><code>dragonfly</code></td> <td><code>amd64</code></td>
   503  </tr>
   504  <tr>
   505  <td></td><td><code>freebsd</code></td> <td><code>386</code></td>
   506  </tr>
   507  <tr>
   508  <td></td><td><code>freebsd</code></td> <td><code>amd64</code></td>
   509  </tr>
   510  <tr>
   511  <td></td><td><code>freebsd</code></td> <td><code>arm</code></td>
   512  </tr>
   513  <tr>
   514  <td></td><td><code>linux</code></td> <td><code>386</code></td>
   515  </tr>
   516  <tr>
   517  <td></td><td><code>linux</code></td> <td><code>amd64</code></td>
   518  </tr>
   519  <tr>
   520  <td></td><td><code>linux</code></td> <td><code>arm</code></td>
   521  </tr>
   522  <tr>
   523  <td></td><td><code>linux</code></td> <td><code>arm64</code></td>
   524  </tr>
   525  <tr>
   526  <td></td><td><code>linux</code></td> <td><code>ppc64</code></td>
   527  </tr>
   528  <tr>
   529  <td></td><td><code>linux</code></td> <td><code>ppc64le</code></td>
   530  </tr>
   531  <tr>
   532  <td></td><td><code>linux</code></td> <td><code>mips</code></td>
   533  </tr>
   534  <tr>
   535  <td></td><td><code>linux</code></td> <td><code>mipsle</code></td>
   536  </tr>
   537  <tr>
   538  <td></td><td><code>linux</code></td> <td><code>mips64</code></td>
   539  </tr>
   540  <tr>
   541  <td></td><td><code>linux</code></td> <td><code>mips64le</code></td>
   542  </tr>
   543  <tr>
   544  <td></td><td><code>linux</code></td> <td><code>s390x</code></td>
   545  </tr>
   546  <tr>
   547  <td></td><td><code>netbsd</code></td> <td><code>386</code></td>
   548  </tr>
   549  <tr>
   550  <td></td><td><code>netbsd</code></td> <td><code>amd64</code></td>
   551  </tr>
   552  <tr>
   553  <td></td><td><code>netbsd</code></td> <td><code>arm</code></td>
   554  </tr>
   555  <tr>
   556  <td></td><td><code>openbsd</code></td> <td><code>386</code></td>
   557  </tr>
   558  <tr>
   559  <td></td><td><code>openbsd</code></td> <td><code>amd64</code></td>
   560  </tr>
   561  <tr>
   562  <td></td><td><code>openbsd</code></td> <td><code>arm</code></td>
   563  </tr>
   564  <tr>
   565  <td></td><td><code>plan9</code></td> <td><code>386</code></td>
   566  </tr>
   567  <tr>
   568  <td></td><td><code>plan9</code></td> <td><code>amd64</code></td>
   569  </tr>
   570  <tr>
   571  <td></td><td><code>solaris</code></td> <td><code>amd64</code></td>
   572  </tr>
   573  <tr>
   574  <td></td><td><code>windows</code></td> <td><code>386</code></td>
   575  </tr>
   576  <tr>
   577  <td></td><td><code>windows</code></td> <td><code>amd64</code></td>
   578  </tr>
   579  </table>
   580  <br>
   581  
   582  <li><code>$GOHOSTOS</code> and <code>$GOHOSTARCH</code>
   583  <p>
   584  The name of the host operating system and compilation architecture.
   585  These default to the local system's operating system and
   586  architecture.
   587  </p>
   588  </li>
   589  
   590  <p>
   591  Valid choices are the same as for <code>$GOOS</code> and
   592  <code>$GOARCH</code>, listed above.
   593  The specified values must be compatible with the local system.
   594  For example, you should not set <code>$GOHOSTARCH</code> to
   595  <code>arm</code> on an x86 system.
   596  </p>
   597  
   598  <li><code>$GOBIN</code>
   599  <p>
   600  The location where Go binaries will be installed.
   601  The default is <code>$GOROOT/bin</code>.
   602  After installing, you will want to arrange to add this
   603  directory to your <code>$PATH</code>, so you can use the tools.
   604  If <code>$GOBIN</code> is set, the <a href="/cmd/go">go command</a>
   605  installs all commands there.
   606  </p>
   607  </li>
   608  
   609  <li><code>$GO386</code> (for <code>386</code> only, default is auto-detected
   610  if built on either <code>386</code> or <code>amd64</code>, <code>387</code> otherwise)
   611  <p>
   612  This controls the code generated by gc to use either the 387 floating-point unit
   613  (set to <code>387</code>) or SSE2 instructions (set to <code>sse2</code>) for
   614  floating point computations.
   615  </p>
   616  <ul>
   617  	<li><code>GO386=387</code>: use x87 for floating point operations; should support all x86 chips (Pentium MMX or later).</li>
   618  	<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.</li>
   619  </ul>
   620  </li>
   621  
   622  <li><code>$GOARM</code> (for <code>arm</code> only; default is auto-detected if building
   623  on the target processor, 6 if not)
   624  <p>
   625  This sets the ARM floating point co-processor architecture version the run-time
   626  should target. If you are compiling on the target system, its value will be auto-detected.
   627  </p>
   628  <ul>
   629  	<li><code>GOARM=5</code>: use software floating point; when CPU doesn't have VFP co-processor</li>
   630  	<li><code>GOARM=6</code>: use VFPv1 only; default if cross compiling; usually ARM11 or better cores (VFPv2 or better is also supported)</li>
   631  	<li><code>GOARM=7</code>: use VFPv3; usually Cortex-A cores</li>
   632  </ul>
   633  <p>
   634  If in doubt, leave this variable unset, and adjust it if required
   635  when you first run the Go executable.
   636  The <a href="//golang.org/wiki/GoArm">GoARM</a> page
   637  on the <a href="//golang.org/wiki">Go community wiki</a>
   638  contains further details regarding Go's ARM support.
   639  </p>
   640  </li>
   641  
   642  <li><code>$GOMIPS</code> (for <code>mips</code> and <code>mipsle</code> only)
   643  <p>
   644  This sets whether to use floating point instructions.
   645  </p>
   646  <ul>
   647  	<li><code>GOMIPS=hardfloat</code>: use floating point instructions (the default)</li>
   648  	<li><code>GOMIPS=softfloat</code>: use soft floating point</li>
   649  </ul>
   650  </li>
   651  
   652  </ul>
   653  
   654  <p>
   655  Note that <code>$GOARCH</code> and <code>$GOOS</code> identify the
   656  <em>target</em> environment, not the environment you are running on.
   657  In effect, you are always cross-compiling.
   658  By architecture, we mean the kind of binaries
   659  that the target environment can run:
   660  an x86-64 system running a 32-bit-only operating system
   661  must set <code>GOARCH</code> to <code>386</code>,
   662  not <code>amd64</code>.
   663  </p>
   664  
   665  <p>
   666  If you choose to override the defaults,
   667  set these variables in your shell profile (<code>$HOME/.bashrc</code>,
   668  <code>$HOME/.profile</code>, or equivalent). The settings might look
   669  something like this:
   670  </p>
   671  
   672  <pre>
   673  export GOROOT=$HOME/go1.X
   674  export GOARCH=amd64
   675  export GOOS=linux
   676  </pre>
   677  
   678  <p>
   679  although, to reiterate, none of these variables needs to be set to build,
   680  install, and develop the Go tree.
   681  </p>