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