Unofficial ARM tarballs for Go

End of life notice

With the release of Go 1.6 the Go team have made available official ARMv61 binary releases. Thus, this page is now end of life and will no longer be updated. The existing Go 1.4.x and 1.5.x releases will remain for a time to assist people bootstrapping ARM systems.

For other arm variants, I recommend cross compiling or building from source:

Notes

  1. ARMv6 is upwards compatible with ARMv7 systems. There is no material performance difference running an ARMv6 binary on an ARMv7 system.

These are unofficial tarball builds of the Go language distribution prepared for the convenience of developers wanting to experiment with Go on ARM platforms. For official tarballs and installers, please see the golang.org download site.

For installation instructions, please see the installation instructions from the golang.org website, substituting the download URL as necessary.

Please help the Go project by testing your Go programs with the new tool chain and libraries, and report any problems using the issue tracker, http://golang.org/issue/new.

Choosing the right version

There are three families; ARMv5, ARMv6, ARMv7, and two flavours; multiarch and non multiarch.

How can I tell which family my host uses ?

Look at the Processor line in the output of cat /proc/cpuinfo. In general code for older ARM systems will work on later systems, but not the other way around.

How can I tell if my distribution uses multiarch ?

Multiarch is a way of naming libraries and binaries on Debian based systems (this includes Raspbian and Ubuntu) to allow versions for different CPU families to be present on the same system. This specifically impacts Go programs as the linker, 5l, needs to embed the correct location of the dynamic loader into the final executable. Go 1.1 now supports cgo on ARM platforms, so will produce a dynamically linked binary whenever the net, os/user or other cgo based packages are imported. As the go tool itself uses those packages, it is a dynamically linked binary, so you need to choose the right flavour to match your distribution.

  • If your distribution has the file /lib/ld-linux-armhf.so.3 or /lib/ld-linux-armel.so.3, your distribution uses multiarch, you should use the multiarch flavour. This includes distributions like Debian, Ubuntu, ChromeOS and Raspbian.
  • If your distribution has the file /lib/ld-linux.so.3, your distribution does not use multiarch, you should not use the multiarch flavour. Distributions like Arch Linux ARM do not use multiarch.
  • If your distribution has both, then you can use either flavour.

If you find that the go tool is not executable

% /usr/local/go/bin/go
bash: /usr/local/go/bin/go: No such file or directory

please try the other flavour.

Go 1.5.3 released January 15th, 2016

Due to a change in the Go release process for Go 1.5, only ARMv6 builds are available. ARMv6 builds are upwardly compatible with ARMv7.

ARMv6/v7 (multiarch only)

This release should be compatible with all Raspberry Pi models.

For other arm variants, I recommend cross compiling or building from source:

  1. Build from source, http://dave.cheney.net/2015/09/04/building-go-1-5-on-the-raspberry-pi
  2. Cross compile, http://dave.cheney.net/2015/08/22/cross-compilation-with-go-1-5

You can also follow issue 13066 for more details.

go1.4.2 released February 18th, 2015

These tarballs were prepared from the go1.4.2 release tag using the official distribution tool.

ARMv5

ARMv6 (Raspberry Pi, etc)

ARMv7 (Raspberry Pi 2, Pandaboard, Chromebook, etc)