- https://gist.github.com/nikhita/432436d570b89cab172dcf2894465753
- https://github.com/eduncan911/dotfiles/blob/master/bin/upgrade-go.sh
1#!/bin/bash
2set -o errexit
3
4function _upgrade_go_binary {
5
6 go_latest_version=$(curl --silent https://go.dev/doc/devel/release | grep -Eo 'go[0-9]+(\.[0-9]+)+' | sort -V | uniq | tail -1)
7
8 # go_latest_version="go1.20rc3"
9
10
11 if [[ $go_latest_version == "" ]]; then
12 echo "Skipping Go binary upgrade (no version found)."
13 return
14 fi
15
16
17 if [ -d ~/Sdk/go/$go_latest_version ]; then
18 echo "Lastest version of Go already installed, skipping upgrade."
19 return
20 fi
21
22 [[ $(hash go 2>/dev/null) ]] && go version
23 echo "Upgrading to $go_latest_version"
24
25 # compatible with Linux and Darwin (maybe windows too)
26 local GO_LATEST_FILENAME="$go_latest_version.$(uname -s | \
27 tr '[:upper:]' '[:lower:]')-amd64.tar.gz"
28 echo "Downloading $GO_LATEST_FILENAME to ~/.bin/go/$GO_LATEST_FILENAME"
29 wget https://dl.google.com/go/$GO_LATEST_FILENAME -O /tmp/$GO_LATEST_FILENAME
30
31 echo "Installing $GO_LATEST_FILENAME"
32 cd ~/Sdk/go
33 tar zxf /tmp/$GO_LATEST_FILENAME
34 rm /tmp/$GO_LATEST_FILENAME
35 mv go $go_latest_version
36 ln -sfn ~/Sdk/go/$go_latest_version ~/Sdk/go/current
37
38 go version
39}
40if [[ -d ~/Sdk/go ]]; then
41 _upgrade_go_binary
42 echo "Skipped upgrading binary. source is now paged."
43else
44 echo "No custom ~/Sdk/go/ detected. Using system installed version."
45fi
46unset _upgrade_go_binary
47
48if [[ ! -x "$(which go)" ]]; then
49 echo "Go is not installed. Exiting."
50 exit 3
51fi