#!/bin/bash
set -o errexit
function _upgrade_go_binary {
go_latest_version=$(curl --silent https://go.dev/doc/devel/release | grep -Eo 'go[0-9]+(\.[0-9]+)+' | sort -V | uniq | tail -1)
# go_latest_version="go1.20rc3"
if [[ $go_latest_version == "" ]]; then
echo "Skipping Go binary upgrade (no version found)."
return
fi
if [ -d ~/Sdk/go/$go_latest_version ]; then
echo "Lastest version of Go already installed, skipping upgrade."
return
fi
[[ $(hash go 2>/dev/null) ]] && go version
echo "Upgrading to $go_latest_version"
# compatible with Linux and Darwin (maybe windows too)
local GO_LATEST_FILENAME="$go_latest_version.$(uname -s | \
tr '[:upper:]' '[:lower:]')-amd64.tar.gz"
echo "Downloading $GO_LATEST_FILENAME to ~/.bin/go/$GO_LATEST_FILENAME"
wget https://dl.google.com/go/$GO_LATEST_FILENAME -O /tmp/$GO_LATEST_FILENAME
echo "Installing $GO_LATEST_FILENAME"
cd ~/Sdk/go
tar zxf /tmp/$GO_LATEST_FILENAME
rm /tmp/$GO_LATEST_FILENAME
mv go $go_latest_version
ln -sfn ~/Sdk/go/$go_latest_version ~/Sdk/go/current
go version
}
if [[ -d ~/Sdk/go ]]; then
_upgrade_go_binary
echo "Skipped upgrading binary. source is now paged."
else
echo "No custom ~/Sdk/go/ detected. Using system installed version."
fi
unset _upgrade_go_binary
if [[ ! -x "$(which go)" ]]; then
echo "Go is not installed. Exiting."
exit 3
fi