Installing Go programming language in Linux is no big deal. It will only take a few minutes to install and configure Go language. Good thing is it is now even easier to install Golang in Linux using Update-golang script.
Table of Contents
What is Update-golang?
Update-golang is a shell script to easily fetch and install latest Golang versions with minimum user interaction. Anyone can now easily install a stable Go release on their Linux machine with the help of this script. Everything is automated! Just run this script and sit back. This script will do the following:
- First, Update-golang script will search the latest available Golang binary from the Golang release history page.
- Next it will find your Linux system's OS version and architecture to download the matching binary. The downloaded files will be kept under
/usr/local
directory. You can delete them after installing Go. - Once the correct Go binary is downloaded, it is installed at
/usr/local/go
location. - Next, the path
/usr/local/go/bin
is added to your$PATH
. - And then, it will setup GOROOT path.
- Finally, it will test the Golang installation by running a
hello world
program.
This script is not only for new installation, you can also use it to update the currently installed Go version to next available version!
Install Golang in Linux using Update-golang Script
Download the Update-golang script by cloning its repository from GitHub:
$ git clone https://github.com/udhos/update-golang
The above command will clone the contents of official update-golang repository in a local directory named update-golang
. Cd into this directory:
$ cd update-golang
It is always recommended to check the integrity of a script downloaded from Internet. So let us do that by verifying the CHECKSUM value of update-golang script:
$ wget -qO hash.txt https://raw.githubusercontent.com/udhos/update-golang/master/update-golang.sh.sha256
$ sha256sum -c hash.txt
If you get an output as OK, you're good to go.
update-golang.sh: OK
After verifying the chekcsum, run the following command to install latest Golang version on your Linux machine:
$ sudo ./update-golang.sh
Sample output:
update-golang.sh: version 0.24 update-golang.sh: find_latest: found last release: 1.16.2 update-golang.sh: user: uid=0(root) gid=0(root) groups=0(root) update-golang.sh: RELEASE_LIST=https://golang.org/dl/ update-golang.sh: SOURCE=https://storage.googleapis.com/golang update-golang.sh: DESTINATION=/usr/local update-golang.sh: RELEASE=1.16.2 update-golang.sh: OS=linux update-golang.sh: ARCH_PROBE=uname -m update-golang.sh: ARCH=amd64 update-golang.sh: PROFILED=/etc/profile.d/golang_path.sh update-golang.sh: CACHE=/usr/local update-golang.sh: GOPATH= update-golang.sh: DEBUG= update-golang.sh: update-golang.sh: will install golang go1.16.2.linux-amd64 as: /usr/local/go update-golang.sh: https://storage.googleapis.com/golang/go1.16.2.linux-amd64.tar.gz is remote --2021-03-30 06:02:35-- https://storage.googleapis.com/golang/go1.16.2.linux-amd64.tar.gz Resolving storage.googleapis.com (storage.googleapis.com)... 2404:6800:4009:81f::2010, 2404:6800:4009:820::2010, 2404:6800:4009:81d::2010, ... Connecting to storage.googleapis.com (storage.googleapis.com)|2404:6800:4009:81f::2010|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 129010536 (123M) [application/octet-stream] Saving to: ‘/usr/local/go1.16.2.linux-amd64.tar.gz’ /usr/local/go1.16.2.linux-amd64.t 100%[=============================================================>] 123.03M 501KB/s in 5m 2s 2021-03-30 06:07:40 (417 KB/s) - ‘/usr/local/go1.16.2.linux-amd64.tar.gz’ saved [129010536/129010536] update-golang.sh: remove_old_link: not found symlink for old install update-golang.sh: untar: tar -x -f /usr/local/go1.16.2.linux-amd64.tar.gz update-golang.sh: profile_path_add: issuing new /usr/local/go/bin to /etc/profile.d/golang_path.sh update-golang.sh: profile_path_add: issuing $HOME/go/bin to /etc/profile.d/golang_path.sh update-golang.sh: golang go1.16.2.linux-amd64 installed at: /usr/local/go update-golang.sh: testing: /usr/local/go/bin/go version update-golang.sh: unsudo: running_as_root:ostechnix: /usr/local/go/bin/go version update-golang.sh: go version go1.16.2 linux/amd64 update-golang.sh: /usr/local/go/bin/go version: SUCCESS update-golang.sh: unsudo: running_as_root:ostechnix: mktemp -t hello-tmpXXXXXXXX update-golang.sh: unsudo: running_as_root:ostechnix: tee /tmp/hello-tmpqGBVcjhy.go update-golang.sh: testing: /usr/local/go/bin/go run /tmp/hello-tmpqGBVcjhy.go update-golang.sh: unsudo: running_as_root:ostechnix: /usr/local/go/bin/go run /tmp/hello-tmpqGBVcjhy.go update-golang.sh: hello, world update-golang.sh: /usr/local/go/bin/go run /tmp/hello-tmpqGBVcjhy.go: SUCCESS update-golang.sh: running_as_root: yes update-golang.sh: recursively forcing build cache [/home/ostechnix/.cache/go-build] ownership to 1000:1000
Check Golang Version and Environment Information
To verify the installed Go version, run:
$ go version go version go1.16.2 linux/amd64
As you can see, Update-golang script has installed Go version 1.16.2. This is the latest, stable Go version at the time of writing this guide.
To print Go environment information, run:
$ go env
Sample output:
GO111MODULE="" GOARCH="amd64" GOBIN="" GOCACHE="/home/ostechnix/.cache/go-build" GOENV="/home/ostechnix/.config/go/env" GOEXE="" GOFLAGS="" GOHOSTARCH="amd64" GOHOSTOS="linux" GOINSECURE="" GOMODCACHE="/home/ostechnix/go/pkg/mod" GONOPROXY="" GONOSUMDB="" GOOS="linux" GOPATH="/home/ostechnix/go" GOPRIVATE="" GOPROXY="https://proxy.golang.org,direct" GOROOT="/usr/local/go" GOSUMDB="sum.golang.org" GOTMPDIR="" GOTOOLDIR="/usr/local/go/pkg/tool/linux_amd64" GOVCS="" GOVERSION="go1.16.2" GCCGO="gccgo" AR="ar" CC="gcc" CXX="g++" CGO_ENABLED="1" GOMOD="/dev/null" 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 -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build883237217=/tmp/go-build -gno-record-gcc-switches"
Install Golang Beta or Release Candidate (RC) Version
By default, Update-golang script will install the latest stable version. If you want to install any beta or release candidate versions, explicitly mention the version like below:
Install Golang beta:
$ sudo RELEASE=1.9beta1 ./update-golang.sh
Install release candidate (RC):
$ sudo RELEASE=1.11rc1 ./update-golang.sh
Golang Per-user Installation
By default, Update-golang script installs Golang system-wide. If you want to install Golang for current user, simply create a installation directory, for example ~/golang
:
$ mkdir ~/golang
And then install GO using command:
$ DESTINATION=~/golang PROFILED=~/.profile ./update-golang.sh
Please note that per-user installation does not need root
or sudo
permission.
Prevent Caching Downloaded Files
As mentioned earlier, Update-golang script will keep the downloaded archives in /usr/local
directory. If you don't want cache the archive files, simply use -declutter
option:
$ sudo ./update-golang.sh -declutter
This time the installation files will not be cached.
Remove Golang
To undo all steps done by Update-golang script, go to the directory where you cloned the script and run:
$ sudo ./update-golang.sh remove
This command will remove Go and all related entries from the $PATH.
update-golang.sh: version 0.24 update-golang.sh: find_latest: found last release: 1.16.2 update-golang.sh: remove: found symlink for old install: /usr/local/go1.16.2.linux-amd64 update-golang.sh: remove: removing symlink: /usr/local/go update-golang.sh: remove: removing dir: /usr/local/go1.16.2.linux-amd64 update-golang.sh: profile_path_remove: removing old settings from: /etc/profile.d/golang_path.sh
Resource:
Related read: