2012-02-13 23:02:28 -07:00
<!-- {
"Title": "Installing Go from source",
2012-03-04 20:31:27 -07:00
"Path": "/doc/install/source"
2012-02-13 23:02:28 -07:00
}-->
< h2 id = "introduction" > Introduction< / h2 >
2012-03-02 15:36:09 -07:00
< p >
Go is an open source project, distributed under a
2012-02-13 23:02:28 -07:00
< a href = "/LICENSE" > BSD-style license< / a > .
This document explains how to check out the sources,
build them on your own machine, and run them.
< / p >
2012-03-02 15:36:09 -07:00
< p >
Most users don't need to do this, and will instead install
from precompiled binary packages as described in
2012-03-04 20:31:27 -07:00
< a href = "/doc/install" > Getting Started< / a > ,
2012-03-02 15:36:09 -07:00
a much simpler process.
If you want to help develop what goes into those precompiled
packages, though, read on.
< / p >
2012-02-13 23:02:28 -07:00
< div class = "detail" >
< p >
2018-01-09 13:26:21 -07:00
There are two official Go compiler toolchains.
2012-02-13 23:02:28 -07:00
This document focuses on the < code > gc< / code > Go
2015-06-23 17:50:12 -06:00
compiler and tools.
2012-03-02 15:36:09 -07:00
For information on how to work on < code > gccgo< / code > , a more traditional
2012-02-13 23:02:28 -07:00
compiler using the GCC back end, see
2012-03-04 20:31:27 -07:00
< a href = "/doc/install/gccgo" > Setting up and using gccgo< / a > .
2012-02-13 23:02:28 -07:00
< / p >
< p >
2016-12-01 21:12:18 -07:00
The Go compilers support eight instruction sets.
2012-02-13 23:02:28 -07:00
There are important differences in the quality of the compilers for the different
architectures.
< / p >
< dl >
< dt >
2015-06-10 03:56:01 -06:00
< code > amd64< / code > (also known as < code > x86-64< / code > )
2012-02-13 23:02:28 -07:00
< / dt >
< dd >
2016-10-18 13:54:04 -06:00
A mature implementation.
2012-02-13 23:02:28 -07:00
< / dd >
< dt >
2015-06-10 03:56:01 -06:00
< code > 386< / code > (< code > x86< / code > or < code > x86-32< / code > )
2012-02-13 23:02:28 -07:00
< / dt >
< dd >
2016-10-18 13:54:04 -06:00
Comparable to the < code > amd64< / code > port.
2012-02-13 23:02:28 -07:00
< / dd >
< dt >
2015-06-10 03:56:01 -06:00
< code > arm< / code > (< code > ARM< / code > )
2012-02-13 23:02:28 -07:00
< / dt >
< dd >
2016-12-01 21:12:18 -07:00
Supports Linux, FreeBSD, NetBSD, OpenBSD and Darwin binaries. Less widely used than the other ports.
2015-06-10 03:56:01 -06:00
< / dd >
< dt >
< code > arm64< / code > (< code > AArch64< / code > )
< / dt >
< dd >
2016-05-24 15:12:35 -06:00
Supports Linux and Darwin binaries. New in 1.5 and not as well exercised as other ports.
2015-06-10 03:56:01 -06:00
< / dd >
< dt >
< code > ppc64, ppc64le< / code > (64-bit PowerPC big- and little-endian)
< / dt >
< dd >
2016-05-24 15:12:35 -06:00
Supports Linux binaries. New in 1.5 and not as well exercised as other ports.
2012-02-13 23:02:28 -07:00
< / dd >
2016-12-01 21:12:18 -07:00
< dt >
< code > mips, mipsle< / code > (32-bit MIPS big- and little-endian)
< / dt >
< dd >
Supports Linux binaries. New in 1.8 and not as well exercised as other ports.
< / dd >
2015-11-13 01:12:26 -07:00
< dt >
< code > mips64, mips64le< / code > (64-bit MIPS big- and little-endian)
< / dt >
< dd >
2016-05-24 15:12:35 -06:00
Supports Linux binaries. New in 1.6 and not as well exercised as other ports.
2015-11-13 01:12:26 -07:00
< / dd >
2016-06-19 23:33:52 -06:00
< dt >
< code > s390x< / code > (IBM System z)
< / dt >
< dd >
Supports Linux binaries. New in 1.7 and not as well exercised as other ports.
< / dd >
2012-02-13 23:02:28 -07:00
< / dl >
< p >
Except for things like low-level operating system interface code, the run-time
support is the same in all ports and includes a mark-and-sweep garbage
collector, efficient array and string slicing, and support for efficient
goroutines, such as stacks that grow and shrink on demand.
< / p >
< p >
2014-03-25 23:06:18 -06:00
The compilers can target the DragonFly BSD, FreeBSD, Linux, NetBSD, OpenBSD,
2018-06-19 14:14:00 -06:00
macOS (Darwin), Plan 9, Solaris and Windows operating systems.
2012-02-13 23:02:28 -07:00
The full set of supported combinations is listed in the discussion of
< a href = "#environment" > environment variables< / a > below.
< / p >
2016-01-06 13:51:01 -07:00
< p >
See the main installation page for the < a href = "/doc/install#requirements" > overall system requirements< / a > .
The following additional constraints apply to systems that can be built only from source:
< / p >
< ul >
< li > For Linux on PowerPC 64-bit, the minimum supported kernel version is 2.6.37, meaning that
Go does not support CentOS 6 on these systems.
< / li >
< / ul >
2012-02-13 23:02:28 -07:00
< / div >
2015-02-10 18:44:50 -07:00
< h2 id = "go14" > Install Go compiler binaries< / h2 >
2012-02-13 23:02:28 -07:00
< p >
2018-01-09 13:26:21 -07:00
The Go toolchain is written in Go. To build it, you need a Go compiler installed.
2015-02-10 18:44:50 -07:00
The scripts that do the initial build of the tools look for an existing Go tool
2016-10-28 12:03:21 -06:00
chain in < code > $GOROOT_BOOTSTRAP< / code > .
If unset, the default value of < code > GOROOT_BOOTSTRAP< / code >
is < code > $HOME/go1.4< / code > .
2015-02-10 18:44:50 -07:00
< / p >
< p >
2018-01-09 13:26:21 -07:00
There are many options for the bootstrap toolchain.
2016-10-28 12:03:21 -06:00
After obtaining one, set < code > GOROOT_BOOTSTRAP< / code > to the
directory containing the unpacked tree.
For example, < code > $GOROOT_BOOTSTRAP/bin/go< / code > should be
2018-01-09 13:26:21 -07:00
the < code > go< / code > command binary for the bootstrap toolchain.
2015-02-10 18:44:50 -07:00
< / p >
< p >
2018-01-09 13:26:21 -07:00
To use a binary release as a bootstrap toolchain, see
2016-10-28 12:03:21 -06:00
< a href = "/dl/" > the downloads page< / a > or use any other
packaged Go distribution.
2012-02-13 23:02:28 -07:00
< / p >
2015-06-10 04:13:39 -06:00
< p >
2018-01-09 13:26:21 -07:00
To build a bootstrap toolchain from source, use
2016-10-28 12:03:21 -06:00
either the git branch < code > release-branch.go1.4< / code > or
2017-11-26 09:30:39 -07:00
< a href = "https://dl.google.com/go/go1.4-bootstrap-20171003.tar.gz" > go1.4-bootstrap-20171003.tar.gz< / a > ,
2016-10-28 12:03:21 -06:00
which contains the Go 1.4 source code plus accumulated fixes
to keep the tools running on newer operating systems.
2018-01-09 13:26:21 -07:00
(Go 1.4 was the last distribution in which the toolchain was written in C.)
2017-01-24 10:56:57 -07:00
After unpacking the Go 1.4 source, < code > cd< / code > to
2017-09-08 15:38:10 -06:00
the < code > src< / code > subdirectory, set < code > CGO_ENABLED=0< / code > in
the environment, and run < code > make.bash< / code > (or,
2017-01-24 10:56:57 -07:00
on Windows, < code > make.bat< / code > ).
2016-10-28 12:03:21 -06:00
< / p >
< p >
2018-01-09 13:26:21 -07:00
To cross-compile a bootstrap toolchain from source, which is
2016-10-28 12:03:21 -06:00
necessary on systems Go 1.4 did not target (for
example, < code > linux/ppc64le< / code > ), install Go on a different system
and run < a href = "/src/bootstrap.bash" > bootstrap.bash< / a > .
2015-06-10 04:13:39 -06:00
< / p >
< p >
When run as (for example)
< / p >
< pre >
$ GOOS=linux GOARCH=ppc64 ./bootstrap.bash
< / pre >
< p >
< code > bootstrap.bash< / code > cross-compiles a toolchain for that < code > GOOS/GOARCH< / code >
combination, leaving the resulting tree in < code > ../../go-${GOOS}-${GOARCH}-bootstrap< / code > .
That tree can be copied to a machine of the given target type
and used as < code > GOROOT_BOOTSTRAP< / code > to bootstrap a local build.
< / p >
< p >
2016-10-28 12:03:21 -06:00
To use gccgo as the bootstrap toolchain, you need to arrange
for < code > $GOROOT_BOOTSTRAP/bin/go< / code > to be the go tool that comes
as part of gccgo 5. For example on Ubuntu Vivid:
2015-06-10 04:13:39 -06:00
< / p >
< pre >
$ sudo apt-get install gccgo-5
$ sudo update-alternatives --set go /usr/bin/go-5
$ GOROOT_BOOTSTRAP=/usr ./make.bash
< / pre >
2014-12-11 19:53:29 -07:00
< h2 id = "git" > Install Git, if needed< / h2 >
2012-02-13 23:02:28 -07:00
< p >
2014-12-11 19:53:29 -07:00
To perform the next step you must have Git installed. (Check that you
have a < code > git< / code > command before proceeding.)
2012-02-13 23:02:28 -07:00
< / p >
< p >
2014-12-11 19:53:29 -07:00
If you do not have a working Git installation,
2012-04-13 21:27:11 -06:00
follow the instructions on the
2018-06-13 01:06:04 -06:00
< a href = "https://git-scm.com/downloads" > Git downloads< / a > page.
2012-02-13 23:02:28 -07:00
< / p >
2016-01-26 15:56:08 -07:00
< h2 id = "ccompiler" > (Optional) Install a C compiler< / h2 >
< p >
To build a Go installation
with < code > < a href = "/cmd/cgo" > cgo< / a > < / code > support, which permits Go
programs to import C libraries, a C compiler such as < code > gcc< / code >
or < code > clang< / code > must be installed first. Do this using whatever
installation method is standard on the system.
< / p >
< p >
To build without < code > cgo< / code > , set the environment variable
< code > CGO_ENABLED=0< / code > before running < code > all.bash< / code > or
< code > make.bash< / code > .
< / p >
2012-02-13 23:02:28 -07:00
< h2 id = "fetch" > Fetch the repository< / h2 >
< p > Go will install to a directory named < code > go< / code > .
Change to the directory that will be its parent
and make sure the < code > go< / code > directory does not exist.
2016-04-13 20:12:11 -06:00
Then clone the repository and check out the latest release tag
2017-08-24 12:52:35 -06:00
(< code class = "versionTag" > go1.9< / code > , for example):< / p >
2012-02-13 23:02:28 -07:00
< pre >
2014-12-11 19:53:29 -07:00
$ git clone https://go.googlesource.com/go
$ cd go
2016-04-13 20:12:11 -06:00
$ git checkout < span class = "versionTag" > < i > < tag> < / i > < / span >
2012-02-13 23:02:28 -07:00
< / pre >
2016-04-13 20:12:11 -06:00
< p class = "whereTag" >
Where < code > < tag> < / code > is the version string of the release.
< / p >
2014-12-11 19:53:29 -07:00
< h2 id = "head" > (Optional) Switch to the master branch< / h2 >
2012-09-26 12:39:31 -06:00
< p > If you intend to modify the go source code, and
< a href = "/doc/contribute.html" > contribute your changes< / a >
to the project, then move your repository
2014-12-11 19:53:29 -07:00
off the release branch, and onto the master (development) branch.
2012-09-26 12:39:31 -06:00
Otherwise, skip this step.< / p >
< pre >
2014-12-11 19:53:29 -07:00
$ git checkout master
2012-09-26 12:39:31 -06:00
< / pre >
2012-02-13 23:02:28 -07:00
< h2 id = "install" > Install Go< / h2 >
< p >
To build the Go distribution, run
< / p >
< pre >
2015-02-25 11:57:45 -07:00
$ cd src
2012-02-13 23:02:28 -07:00
$ ./all.bash
< / pre >
< p >
(To build under Windows use < code > all.bat< / code > .)
< / p >
< p >
If all goes well, it will finish by printing output like:
< / p >
< pre >
ALL TESTS PASSED
---
Installed Go for linux/amd64 in /home/you/go.
Installed commands in /home/you/go/bin.
*** You need to add /home/you/go/bin to your $PATH. ***
< / pre >
< p >
where the details on the last few lines reflect the operating system,
architecture, and root directory used during the install.
< / p >
< div class = "detail" >
< p >
For more information about ways to control the build, see the discussion of
< a href = "#environment" > environment variables< / a > below.
2013-12-15 19:03:12 -07:00
< code > all.bash< / code > (or < code > all.bat< / code > ) runs important tests for Go,
which can take more time than simply building Go. If you do not want to run
the test suite use < code > make.bash< / code > (or < code > make.bat< / code > )
instead.
2012-02-13 23:02:28 -07:00
< / p >
< / div >
< h2 id = "testing" > Testing your installation< / h2 >
< p >
Check that Go is installed correctly by building a simple program.
< / p >
< p >
Create a file named < code > hello.go< / code > and put the following program in it:
< / p >
< pre >
package main
import "fmt"
func main() {
2018-04-10 21:22:59 -06:00
fmt.Printf("hello, world\n")
2012-02-13 23:02:28 -07:00
}
< / pre >
< p >
Then run it with the < code > go< / code > tool:
< / p >
< pre >
$ go run hello.go
hello, world
< / pre >
< p >
If you see the "hello, world" message then Go is installed correctly.
< / p >
2012-06-12 18:33:02 -06:00
< h2 id = "gopath" > Set up your work environment< / h2 >
< p >
2013-11-20 13:55:29 -07:00
You're almost done.
You just need to do a little more setup.
2012-06-12 18:33:02 -06:00
< / p >
2012-02-13 23:02:28 -07:00
2013-11-20 13:55:29 -07:00
< p >
< a href = "/doc/code.html" class = "download" id = "start" >
< span class = "big" > How to Write Go Code< / span >
< span class = "desc" > Learn how to set up and use the Go tools< / span >
< / a >
< / p >
< p >
2016-12-01 18:45:26 -07:00
The < a href = "/doc/code.html" > How to Write Go Code< / a > document
2013-11-20 13:55:29 -07:00
provides < b > essential setup instructions< / b > for using the Go tools.
< / p >
2013-09-24 22:10:49 -06:00
< h2 id = "tools" > Install additional tools< / h2 >
< p >
2013-09-24 22:27:23 -06:00
The source code for several Go tools (including < a href = "/cmd/godoc/" > godoc< / a > )
2014-11-09 15:15:57 -07:00
is kept in < a href = "https://golang.org/x/tools" > the go.tools repository< / a > .
2019-02-12 21:45:45 -07:00
To install one of the tools (< code > godoc< / code > in this case):
2013-09-24 22:10:49 -06:00
< / p >
< pre >
2014-11-09 15:15:57 -07:00
$ go get golang.org/x/tools/cmd/godoc
2013-09-24 22:10:49 -06:00
< / pre >
< p >
2016-12-01 18:45:26 -07:00
To install these tools, the < code > go< / code > < code > get< / code > command requires
2014-12-11 19:53:29 -07:00
that < a href = "#git" > Git< / a > be installed locally.
2013-09-24 22:10:49 -06:00
< / p >
< p >
You must also have a workspace (< code > GOPATH< / code > ) set up;
see < a href = "/doc/code.html" > How to Write Go Code< / a > for the details.
< / p >
2012-02-13 23:02:28 -07:00
< h2 id = "community" > Community resources< / h2 >
< p >
2012-03-02 15:36:09 -07:00
The usual community resources such as
2018-06-13 01:06:04 -06:00
< code > #go-nuts< / code > on the < a href = "https://freenode.net/" > Freenode< / a > IRC server
2012-03-02 15:36:09 -07:00
and the
2014-07-24 18:28:39 -06:00
< a href = "//groups.google.com/group/golang-nuts" > Go Nuts< / a >
2012-03-02 15:36:09 -07:00
mailing list have active developers that can help you with problems
with your installation or your development work.
For those who wish to keep up to date,
2014-07-24 18:28:39 -06:00
there is another mailing list, < a href = "//groups.google.com/group/golang-checkins" > golang-checkins< / a > ,
2012-03-02 15:36:09 -07:00
that receives a message summarizing each checkin to the Go repository.
2012-02-13 23:02:28 -07:00
< / p >
< p >
2014-12-11 19:53:29 -07:00
Bugs can be reported using the < a href = "//golang.org/issue/new" > Go issue tracker< / a > .
2012-02-13 23:02:28 -07:00
< / p >
< h2 id = "releases" > Keeping up with releases< / h2 >
< p >
2014-12-11 19:53:29 -07:00
New releases are announced on the
2014-07-24 18:28:39 -06:00
< a href = "//groups.google.com/group/golang-announce" > golang-announce< / a >
2012-02-13 23:02:28 -07:00
mailing list.
2014-12-11 19:53:29 -07:00
Each announcement mentions the latest release tag, for instance,
2017-08-24 12:52:35 -06:00
< code class = "versionTag" > go1.9< / code > .
2012-02-13 23:02:28 -07:00
< / p >
< p >
To update an existing tree to the latest release, you can run:
< / p >
< pre >
$ cd go/src
2014-12-11 19:53:29 -07:00
$ git fetch
2016-04-13 20:12:11 -06:00
$ git checkout < span class = "versionTag" > < i > < tag> < / i > < / psan >
2012-02-13 23:02:28 -07:00
$ ./all.bash
< / pre >
2016-04-13 20:12:11 -06:00
< p class = "whereTag" >
2014-12-11 19:53:29 -07:00
Where < code > < tag> < / code > is the version string of the release.
2016-04-13 20:12:11 -06:00
< / p >
2014-12-11 19:53:29 -07:00
2012-02-13 23:02:28 -07:00
< h2 id = "environment" > Optional environment variables< / h2 >
< p >
The Go compilation environment can be customized by environment variables.
2012-03-02 15:36:09 -07:00
< i > None is required by the build< / i > , but you may wish to set some
2012-02-13 23:02:28 -07:00
to override the defaults.
< / p >
2013-06-09 09:15:39 -06:00
< ul >
< li > < code > $GOROOT< / code >
2012-03-05 21:16:02 -07:00
< p >
2016-11-30 12:56:58 -07:00
The root of the Go tree, often < code > $HOME/go1.X< / code > .
2012-03-05 21:16:02 -07:00
Its value is built into the tree when it is compiled, and
defaults to the parent of the directory where < code > all.bash< / code > was run.
There is no need to set this unless you want to switch between multiple
local copies of the repository.
< / p >
2018-01-30 09:55:27 -07:00
< / li >
2012-03-05 21:16:02 -07:00
2013-06-09 09:15:39 -06:00
< li > < code > $GOROOT_FINAL< / code >
2012-03-05 21:16:02 -07:00
< p >
The value assumed by installed binaries and scripts when
< code > $GOROOT< / code > is not set explicitly.
It defaults to the value of < code > $GOROOT< / code > .
If you want to build the Go tree in one location
2016-12-01 18:45:26 -07:00
but move it elsewhere after the build, set
2012-03-05 21:16:02 -07:00
< code > $GOROOT_FINAL< / code > to the eventual location.
< / p >
2018-01-30 09:55:27 -07:00
< / li >
2012-03-05 21:16:02 -07:00
2013-06-09 09:15:39 -06:00
< li > < code > $GOOS< / code > and < code > $GOARCH< / code >
2012-03-05 21:16:02 -07:00
< p >
The name of the target operating system and compilation architecture.
These default to the values of < code > $GOHOSTOS< / code > and
< code > $GOHOSTARCH< / code > respectively (described below).
2018-01-30 09:55:27 -07:00
< / li >
2012-03-05 21:16:02 -07:00
< p >
Choices for < code > $GOOS< / code > are
2018-06-19 14:14:00 -06:00
< code > darwin< / code > (macOS 10.10 and above and iOS), < code > dragonfly< / code > , < code > freebsd< / code > ,
2015-06-10 03:56:01 -06:00
< code > linux< / code > , < code > netbsd< / code > , < code > openbsd< / code > ,
2014-03-25 21:21:28 -06:00
< code > plan9< / code > , < code > solaris< / code > and < code > windows< / code > .
2012-03-05 21:16:02 -07:00
Choices for < code > $GOARCH< / code > are
< code > amd64< / code > (64-bit x86, the most mature port),
2015-06-10 03:56:01 -06:00
< code > 386< / code > (32-bit x86), < code > arm< / code > (32-bit ARM), < code > arm64< / code > (64-bit ARM),
2015-11-13 01:12:26 -07:00
< code > ppc64le< / code > (PowerPC 64-bit, little-endian), < code > ppc64< / code > (PowerPC 64-bit, big-endian),
2017-08-23 05:45:27 -06:00
< code > mips64le< / code > (MIPS 64-bit, little-endian), < code > mips64< / code > (MIPS 64-bit, big-endian),
< code > mipsle< / code > (MIPS 32-bit, little-endian), < code > mips< / code > (MIPS 32-bit, big-endian), and
< code > s390x< / code > (IBM System z 64-bit, big-endian).
2012-03-05 21:16:02 -07:00
The valid combinations of < code > $GOOS< / code > and < code > $GOARCH< / code > are:
< table cellpadding = "0" >
< tr >
2013-06-09 09:15:39 -06:00
< th width = "50" > < / th > < th align = "left" width = "100" > < code > $GOOS< / code > < / th > < th align = "left" width = "100" > < code > $GOARCH< / code > < / th >
2012-03-05 21:16:02 -07:00
< / tr >
< tr >
2016-02-24 16:06:03 -07:00
< td > < / td > < td > < code > android< / code > < / td > < td > < code > arm< / code > < / td >
< / tr >
< tr >
2012-03-05 21:16:02 -07:00
< td > < / td > < td > < code > darwin< / code > < / td > < td > < code > 386< / code > < / td >
< / tr >
< tr >
< td > < / td > < td > < code > darwin< / code > < / td > < td > < code > amd64< / code > < / td >
< / tr >
< tr >
2015-06-10 03:56:01 -06:00
< td > < / td > < td > < code > darwin< / code > < / td > < td > < code > arm< / code > < / td >
< / tr >
< tr >
< td > < / td > < td > < code > darwin< / code > < / td > < td > < code > arm64< / code > < / td >
2014-03-25 23:06:18 -06:00
< / tr >
< tr >
< td > < / td > < td > < code > dragonfly< / code > < / td > < td > < code > amd64< / code > < / td >
< / tr >
< tr >
2012-03-05 21:16:02 -07:00
< td > < / td > < td > < code > freebsd< / code > < / td > < td > < code > 386< / code > < / td >
< / tr >
< tr >
< td > < / td > < td > < code > freebsd< / code > < / td > < td > < code > amd64< / code > < / td >
< / tr >
< tr >
2013-06-09 09:15:39 -06:00
< td > < / td > < td > < code > freebsd< / code > < / td > < td > < code > arm< / code > < / td >
< / tr >
< tr >
2012-03-05 21:16:02 -07:00
< td > < / td > < td > < code > linux< / code > < / td > < td > < code > 386< / code > < / td >
< / tr >
< tr >
< td > < / td > < td > < code > linux< / code > < / td > < td > < code > amd64< / code > < / td >
< / tr >
< tr >
< td > < / td > < td > < code > linux< / code > < / td > < td > < code > arm< / code > < / td >
< / tr >
< tr >
2015-06-10 03:56:01 -06:00
< td > < / td > < td > < code > linux< / code > < / td > < td > < code > arm64< / code > < / td >
< / tr >
< tr >
< td > < / td > < td > < code > linux< / code > < / td > < td > < code > ppc64< / code > < / td >
< / tr >
< tr >
< td > < / td > < td > < code > linux< / code > < / td > < td > < code > ppc64le< / code > < / td >
< / tr >
< tr >
2016-12-01 21:12:18 -07:00
< td > < / td > < td > < code > linux< / code > < / td > < td > < code > mips< / code > < / td >
< / tr >
< tr >
< td > < / td > < td > < code > linux< / code > < / td > < td > < code > mipsle< / code > < / td >
< / tr >
< tr >
2015-11-13 01:12:26 -07:00
< td > < / td > < td > < code > linux< / code > < / td > < td > < code > mips64< / code > < / td >
< / tr >
< tr >
< td > < / td > < td > < code > linux< / code > < / td > < td > < code > mips64le< / code > < / td >
< / tr >
< tr >
2017-08-23 05:45:27 -06:00
< td > < / td > < td > < code > linux< / code > < / td > < td > < code > s390x< / code > < / td >
< / tr >
< tr >
2012-03-05 21:16:02 -07:00
< td > < / td > < td > < code > netbsd< / code > < / td > < td > < code > 386< / code > < / td >
< / tr >
< tr >
< td > < / td > < td > < code > netbsd< / code > < / td > < td > < code > amd64< / code > < / td >
< / tr >
< tr >
2013-06-09 09:15:39 -06:00
< td > < / td > < td > < code > netbsd< / code > < / td > < td > < code > arm< / code > < / td >
< / tr >
< tr >
2012-03-05 21:16:02 -07:00
< td > < / td > < td > < code > openbsd< / code > < / td > < td > < code > 386< / code > < / td >
< / tr >
< tr >
< td > < / td > < td > < code > openbsd< / code > < / td > < td > < code > amd64< / code > < / td >
< / tr >
< tr >
2015-06-10 03:56:01 -06:00
< td > < / td > < td > < code > openbsd< / code > < / td > < td > < code > arm< / code > < / td >
< / tr >
< tr >
2012-03-05 21:16:02 -07:00
< td > < / td > < td > < code > plan9< / code > < / td > < td > < code > 386< / code > < / td >
< / tr >
< tr >
2013-06-09 09:15:39 -06:00
< td > < / td > < td > < code > plan9< / code > < / td > < td > < code > amd64< / code > < / td >
< / tr >
< tr >
2014-03-25 21:21:28 -06:00
< td > < / td > < td > < code > solaris< / code > < / td > < td > < code > amd64< / code > < / td >
< / tr >
< tr >
2012-03-05 21:16:02 -07:00
< td > < / td > < td > < code > windows< / code > < / td > < td > < code > 386< / code > < / td >
< / tr >
< tr >
< td > < / td > < td > < code > windows< / code > < / td > < td > < code > amd64< / code > < / td >
< / tr >
< / table >
2015-07-22 05:00:32 -06:00
< br >
2012-03-05 21:16:02 -07:00
2013-06-09 09:15:39 -06:00
< li > < code > $GOHOSTOS< / code > and < code > $GOHOSTARCH< / code >
2012-03-05 21:16:02 -07:00
< p >
The name of the host operating system and compilation architecture.
These default to the local system's operating system and
architecture.
< / p >
2018-01-30 09:55:27 -07:00
< / li >
2012-03-05 21:16:02 -07:00
< p >
Valid choices are the same as for < code > $GOOS< / code > and
< code > $GOARCH< / code > , listed above.
The specified values must be compatible with the local system.
2016-12-01 18:45:26 -07:00
For example, you should not set < code > $GOHOSTARCH< / code > to
2012-03-05 21:16:02 -07:00
< code > arm< / code > on an x86 system.
< / p >
2013-06-09 09:15:39 -06:00
< li > < code > $GOBIN< / code >
2012-03-05 21:16:02 -07:00
< p >
2012-03-27 09:57:39 -06:00
The location where Go binaries will be installed.
2012-03-05 21:16:02 -07:00
The default is < code > $GOROOT/bin< / code > .
After installing, you will want to arrange to add this
directory to your < code > $PATH< / code > , so you can use the tools.
2012-03-27 09:57:39 -06:00
If < code > $GOBIN< / code > is set, the < a href = "/cmd/go" > go command< / a >
installs all commands there.
2012-03-05 21:16:02 -07:00
< / p >
2018-01-30 09:55:27 -07:00
< / li >
2012-03-05 21:16:02 -07:00
2013-06-09 09:15:39 -06:00
< li > < code > $GO386< / code > (for < code > 386< / code > only, default is auto-detected
2014-06-04 17:53:37 -06:00
if built on either < code > 386< / code > or < code > amd64< / code > , < code > 387< / code > otherwise)
2013-06-09 09:15:39 -06:00
< p >
2015-06-23 17:50:12 -06:00
This controls the code generated by gc to use either the 387 floating-point unit
2013-06-09 09:15:39 -06:00
(set to < code > 387< / code > ) or SSE2 instructions (set to < code > sse2< / code > ) for
floating point computations.
< / p >
< ul >
2018-01-30 09:55:27 -07:00
< li > < code > GO386=387< / code > : use x87 for floating point operations; should support all x86 chips (Pentium MMX or later).< / li >
< 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 >
2013-06-09 09:15:39 -06:00
< / ul >
2018-01-30 09:55:27 -07:00
< / li >
2013-06-09 09:15:39 -06:00
< li > < code > $GOARM< / code > (for < code > arm< / code > only; default is auto-detected if building
on the target processor, 6 if not)
< p >
This sets the ARM floating point co-processor architecture version the run-time
should target. If you are compiling on the target system, its value will be auto-detected.
< / p >
< ul >
2018-01-30 09:55:27 -07:00
< li > < code > GOARM=5< / code > : use software floating point; when CPU doesn't have VFP co-processor< / li >
< li > < code > GOARM=6< / code > : use VFPv1 only; default if cross compiling; usually ARM11 or better cores (VFPv2 or better is also supported)< / li >
< li > < code > GOARM=7< / code > : use VFPv3; usually Cortex-A cores< / li >
2013-06-09 09:15:39 -06:00
< / ul >
2012-03-05 21:16:02 -07:00
< p >
2013-06-09 09:15:39 -06:00
If in doubt, leave this variable unset, and adjust it if required
when you first run the Go executable.
2014-07-24 18:28:39 -06:00
The < a href = "//golang.org/wiki/GoArm" > GoARM< / a > page
on the < a href = "//golang.org/wiki" > Go community wiki< / a >
2013-06-09 09:15:39 -06:00
contains further details regarding Go's ARM support.
2012-03-05 21:16:02 -07:00
< / p >
2018-01-30 09:55:27 -07:00
< / li >
2018-08-29 05:56:37 -06:00
< li > < code > $GOMIPS< / code > (for < code > mips< / code > and < code > mipsle< / code > only) < br > < code > $GOMIPS64< / code > (for < code > mips64< / code > and < code > mips64le< / code > only)
2018-01-30 09:55:27 -07:00
< p >
2018-08-29 05:56:37 -06:00
These variables set whether to use floating point instructions. Set to "< code > hardfloat< / code > " to use floating point instructions; this is the default. Set to "< code > softfloat< / code > " to use soft floating point.
2018-01-30 09:55:27 -07:00
< / p >
< / li >
2012-03-05 21:16:02 -07:00
2013-06-09 09:15:39 -06:00
< / ul >
2012-02-13 23:02:28 -07:00
< p >
Note that < code > $GOARCH< / code > and < code > $GOOS< / code > identify the
< em > target< / em > environment, not the environment you are running on.
In effect, you are always cross-compiling.
By architecture, we mean the kind of binaries
that the target environment can run:
an x86-64 system running a 32-bit-only operating system
must set < code > GOARCH< / code > to < code > 386< / code > ,
not < code > amd64< / code > .
< / p >
< p >
If you choose to override the defaults,
set these variables in your shell profile (< code > $HOME/.bashrc< / code > ,
2016-12-01 18:45:26 -07:00
< code > $HOME/.profile< / code > , or equivalent). The settings might look
2012-02-13 23:02:28 -07:00
something like this:
< / p >
< pre >
export GOARCH=amd64
export GOOS=linux
< / pre >
2012-03-02 15:36:09 -07:00
< p >
although, to reiterate, none of these variables needs to be set to build,
install, and develop the Go tree.
< / p >