Skip to content

Instantly share code, notes, and snippets.

@eplord
Last active April 19, 2023 01:48
Show Gist options
  • Select an option

  • Save eplord/7b1d2da1fbc7eb5e748a5e2f15723085 to your computer and use it in GitHub Desktop.

Select an option

Save eplord/7b1d2da1fbc7eb5e748a5e2f15723085 to your computer and use it in GitHub Desktop.
Install latest version of golang
#!/bin/bash
# Install latest version of golang
#
# https://gist.github.com/eplord/7b1d2da1fbc7eb5e748a5e2f15723085/raw/go
# Usage : curl -fsSL https://tinyurl.com/yc46thx4 | bash
# https://gist.github.com/eplord/c39ebb75fd8c318e207f7ece60d3cddb/raw/_utils
source /dev/stdin <<<"$(curl -fsSL https://tinyurl.com/yck6pv5e)"
# [[ -z "${GOROOT}" ]] && export GOROOT="/usr/lib/go"
# [[ -z "${GOPATH}" ]] && export GOPATH="$HOME/.local/share/go"
# [[ -z "${GOBIN}" ]] && export GOTOOLS="$GOPATH/bin"
# [[ -z "${GOTOOLS}" ]] && export GOBIN="$GOPATH/tools"
# if [ -n "$($SHELL -c 'echo $ZSH_VERSION')" ]; then
# shell_profile="$HOME/.zshrc"
# elif [ -n "$($SHELL -c 'echo $BASH_VERSION')" ]; then
# shell_profile="$HOME/.bashrc"
# fi
# # ----------------------------------------------------------------------------
# sudo echo ""
# doing "Verifying version..."
# GO_LATEST=$(curl -s https://go.dev/dl/ | grep -oP '\/dl\/go([0-9\.]+)\.linux-amd64\.tar\.gz' | head -n 1 | grep -oP 'go[0-9\.]+' | grep -oP '[0-9\.]+' | head -c -2)
# GO_LOCAL=$(go version 2>/dev/null | cut -d ' ' -f 3 | cut -b 3-)
# success
# if [[ "$GO_LATEST" == "$GO_LOCAL" ]]; then
# success_msg "Latest version of Go is already installed"
# exit 0
# fi
# mkdir -p "$GOPATH/"{bin,pkg,src,tools}
# doing "Downloading Go v$GO_LATEST..."
# wget -cq "https://golang.org/dl/go$GO_LATEST.linux-amd64.tar.gz"
# success
# doing "Installing Go v$GO_LATEST..."
# sudo rm -rf "$GOROOT"
# sudo tar -C "$GOROOT" --strip-components=1 -xzf "go$GO_LATEST.linux-amd64.tar.gz"
# sudo rm "go$GO_LATEST.linux-amd64.tar.gz"
# success
# # ----------------------------------------------------------------------------
# echo -e "\nGo $GO_LATEST was installed into $GOROOT with Go Path in $GOPATH\nMake sure to relogin into your shell or run:"
# echo -e "\n\tsource $shell_profile\n\nto update your environment variables."
[[ -z "${GOROOT}" ]] && export GOROOT="/usr/lib/go" || echo "GOROOT=${GOROOT}"
[[ -z "${GOPATH}" ]] && export GOPATH="$HOME/.local/share/go" || echo "GOPATH=${GOPATH}"
[[ -z "${GOBIN}" ]] && export GOTOOLS="$GOPATH/bin" || echo "GOBIN=${GOBIN}"
[[ -z "${GOTOOLS}" ]] && export GOBIN="$GOPATH/tools" || echo "GOTOOLS=${GOTOOLS}"
if [ -n "$($SHELL -c 'echo $ZSH_VERSION')" ]; then
shell_profile="$HOME/.zshrc"
elif [ -n "$($SHELL -c 'echo $BASH_VERSION')" ]; then
shell_profile="$HOME/.bashrc"
fi
# ----------------------------------------------------------------------------
echo -e '\nFinding latest version of Go ...\n'
base_url="https://go.dev"
PATH_URL="$(wget --no-check-certificate -qO- ${base_url}/dl/ | grep -oP '\/dl\/go([0-9\.]+)\.linux-amd64\.tar\.gz' | head -n 1)"
latest="$(echo $PATH_URL | grep -oP 'go[0-9\.]+' | grep -oP '[0-9\.]+' | head -c -2 )"
# ----------------------------------------------------------------------------
mkdir -p "${GOPATH}/"{src,pkg,bin,tools}
echo '\nDownloading latest Go: ${latest}\n'
wget --no-check-certificate --continue --show-progress "$base_url$PATH_URL" -P $GOTOOLS
unset PATH_URL
# ----------------------------------------------------------------------------
LATEST="$(find $GOTOOLS -name "go*" -type f | head -n 1)"
echo "LATEST: ${LATEST}"
echo "Extracting File..."
sudo mkdir -p "$GOROOT"
sudo tar -C "$GOROOT" --strip-components=1 -xzf "$LATEST"
sudo chmod -R 755 "$GOROOT"
# ----------------------------------------------------------------------------
echo -e "\nGo $latest was installed into $GOROOT with Go Path in $GOPATH\nMake sure to relogin into your shell or run:"
echo -e "\n\tsource $shell_profile\n\nto update your environment variables."
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment