Golang/Install
Ubuntu Install
- Ubuntu 18.04 inc. WSL
sudo apt install golang-go
- Ubuntu LTS 16.04, also WSL Ubuntu 16.04
These steps allow to install more modern version of Golang than comes from official Ubuntu repositories. There was major changes between in 1.7 but default version seems to be 1.6.2. At the time of writing this I installed version go1.12.9.
Download from https://golang.org/dl/ and extract it into /usr/local
, creating a Go tree in /usr/local/go
sudo tar -C /usr/local -xzvf go$VERSION.$OS-$ARCH.tar.gz
Add /usr/local/go/bin
to the PATH
environment variable. You can do this by adding this line to your /etc/profile (for a system-wide installation) or $HOME/.profile:
sudo update-alternatives --install "/usr/bin/go" "go" "/usr/local/go/bin/go" 2 #adds to the $PATH export PATH=$PATH:/usr/local/go/bin #optional # Set $GOPATH export GOPATH=$HOME/go export PATH=$PATH:$GOPATH/bin
Multiple versions
You can have multiple versions fo Golang installed in your system. The way to manage the current version in use is to use update-alternatives
Display best options
sudo update-alternatives --display go go - auto mode link best version is /usr/local/go/bin/go link currently points to /usr/local/go/bin/go link go is /usr/bin/go /usr/local/go/bin/go - priority 2
Before
Selection Path Priority Status ------------------------------------------------------------ 0 /usr/bin/golang-go 10 auto mode 1 /usr/bin/gccgo-go 5 manual mode 2 /usr/bin/golang-go 10 manual mode
Action: Installed manually unzipped GoLang into /usr/local/go
but was not added to alternatives. Use command below to add it on:
sudo update-alternatives --install "/usr/bin/go" "go" "/usr/local/go/bin/go" 2
After
Selection Path Priority Status ------------------------------------------------------------ * 0 /usr/bin/golang-go 10 auto mode 1 /usr/bin/gccgo-go 5 manual mode 2 /usr/bin/golang-go 10 manual mode 3 /usr/local/go/bin/go 2 manual mode
Then run command to change go binary available in your shell
sudo update-alternatives --config go #then select ''3''
When you run
$ go version #the version of ''go'' will be the one from <tt>/usr/local/go</tt> location.
Troubleshooting
What is GOPATH
?
- it's an environment variable with a list paths to look for Go code, on Unix it's colon-separated string
- usually
GOPATH
is$HOME/go
wherebin
andsrc
directories exists. Each time you executego get -u <url>
, the binaries will be placed in$HOME/go/bin
and code in$HOME/go/src
- therefore
$HOME/go/bin
needs to be in the$PATH
- default go directory:
/usr/local/go
is calledGOROOT
- default go bin directory:
/usr/local/go/bin
that needs to be in$PATH
Allow 'sudo go <subcommand>'
sudo visudo # then add to'secure_path' '.../go/bin' directory Defaults secure_path=".../bin:/usr/local/go/bin"
Get go environment variables
$ go env GOARCH="amd64" GOBIN="" GOCACHE="/home/ubuntu/.cache/go-build" GOEXE="" GOFLAGS="" GOHOSTARCH="amd64" GOHOSTOS="linux" GOOS="linux" GOPATH="/home/ubuntu/go" GOPROXY="" GORACE="" GOROOT="/usr/local/go" GOTMPDIR="" GOTOOLDIR="/usr/local/go/pkg/tool/linux_amd64" GCCGO="gccgo" CC="gcc" CXX="g++" CGO_ENABLED="1" GOMOD="" CGO_CFLAGS="-g -O2" CGO_CPPFLAGS="" CGO_CXXFLAGS="-g -O2" CGO_FFLAGS="-g -O2" CGO_LDFLAGS="-g -O2" PKG_CONFIG="pkg-config" GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build629810470=/tmp/go-build -gno-record-gcc-switches"