Home Golang Easily Install Golang In Linux Using Update-golang Script

Easily Install Golang In Linux Using Update-golang Script

By sk
Published: Updated: 5.1K views

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.

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:

  1. First, Update-golang script will search the latest available Golang binary from the Golang release history page.
  2. 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.
  3. Once the correct Go binary is downloaded, it is installed at /usr/local/go location.
  4. Next, the path /usr/local/go/bin is added to your $PATH.
  5. And then, it will setup GOROOT path.
  6. 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
Install Golang In Linux Using Update-golang Script
Install Golang In Linux Using Update-golang Script

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:

You May Also Like

Leave a Comment

* By using this form you agree with the storage and handling of your data by this website.

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

This website uses cookies to improve your experience. By using this site, we will assume that you're OK with it. Accept Read More