[How I Fixed] Installing Go on Ubuntu 16.04

I wanted to install Go on Ubuntu 16.04. I thought this would be easy. It kinda is, but it wasn’t super easy.

By easy I mean I found a bunch of copy / paste instructions, but not everything worked first time.

I found out about a tool called gvm , which is similar to nvm  – in other words, a Go Version Manager.

Here’s what I had to do:

bash < <(curl -s -S -L https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer)

This prompted me to run a further command:

source /home/chris/.gvm/scripts/gvm

When I tried to run:

gvm version

I was prompted to install bison:

sudo apt-get install bison

I then ran:

gvm listall

Which showed go1.9.2 as being the latest and greatest.

gvm install go1.9.2

Unfortunately that failed.

The instructions I found gave a suggested fix, but this didn’t work. Here’s what did work for me:

gvm install go1.4 --binary
gvm use go1.4
export GOROOT_BOOTSTRAP=$GOROOT
gvm install go1.9.2
gvm use go1.9.2

After which:

go version

go version go1.9.2 linux/amd64

Nice.

For what it’s worth:

go env

GOARCH="amd64"
GOBIN="/home/chris/go/bin"
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOOS="linux"
GOPATH="/home/chris/go"
GORACE=""
GOROOT="/home/chris/.gvm/gos/go1.9.2"
GOTOOLDIR="/home/chris/.gvm/gos/go1.9.2/pkg/tool/linux_amd64"
GCCGO="gccgo"
CC="gcc"
GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build165142315=/tmp/go-build -gno-record-gcc-switches"
CXX="g++"
CGO_ENABLED="1"
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"

I also hit on a bunch of confusing issues because I’d set my package name to be something different to main .

I’d set my package name to cfbl which resulted in this like this:

cfbl go build   
                           
cfbl go install                            
go install: no install location for directory /home/chris/Development/go/cfbl outside GOPATH
	For more details see: 'go help gopath'

cfbl go run test.go
go run: cannot run non-main package

Inside test.go (which isn’t a TDD style test, just my testing with go) I had to make sure to use package main

I hope that saves someone some confusion.

Published by

Code Review

CodeReviewVideos is a video training site helping software developers learn Symfony faster and easier.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.