#!/usr/bin/env bash ##makedesc: Install golang # https://go.dev/dl/ # https://golang.org/doc/install # https://github.com/udhos/update-golang/blob/master/update-golang.sh set -eo pipefail installed() { command -v "$1" >/dev/null 2>&1; } doRemove() { [ -d "/usr/local/go" ] && sudo rm -rf "/usr/local/go" } install() { dlUrl="https://go.dev/dl" json=$(curl -sSL "$dlUrl/?mode=json") version=$(echo "$json" | jq -r '.[0].version') echo echo "===============================================" echo "Installing golang v$version" echo "===============================================" echo local os="linux" [ "$(uname -s)" = "Darwin" ] && os="darwin" latestJson=$(echo "$json" | jq -r ".[0].files.[] | select (.kind == \"archive\" and .os == \"$os\" and .arch == \"amd64\")") fileName=$(echo "$latestJson" | jq -r '.filename') fileUrl="$dlUrl/$fileName" downloadPath="$HOME/install" archivePath="$downloadPath/$fileName" doRemove if [ ! -f "$archivePath" ]; then if installed wget; then wget -q --show-progress "$fileUrl" -O "$archivePath" else curl -fsSL "$fileUrl" -o "$archivePath" fi fi sudo tar -xzf "$archivePath" -C /usr/local sudo chown "$USER": -R /usr/local/go if ! grep -q '/usr/local/go/bin' "$HOME/.profile" 2>/dev/null; then echo 'export PATH="/usr/local/go/bin:$PATH"' >> "$HOME/.profile" echo "export GOPATH=\"\$HOME/.go\"" >> "$HOME/.profile" fi # shellcheck source=/dev/null source "$HOME/.profile" echo go version go install github.com/go-delve/delve/cmd/dlv@latest echo "Finish!" echo } upgrade() { install } remove() { echo echo "===============================================" echo "Removing golang" echo "===============================================" echo doRemove sed -i '/\/usr\/local\/go\/bin/d' "$HOME/.profile" sed -i '/GOPATH/d' "$HOME/.profile" echo echo "Finish!" echo } case "$1" in u|upgrade|update) upgrade ;; r|remove|d|delete|p|purge) remove ;; *) install ;; esac