Skip to content

Instantly share code, notes, and snippets.

@mdsohelmia
Last active February 23, 2025 08:41
Show Gist options
  • Save mdsohelmia/fa42d8052f581a3d521a3a811b3f4ddd to your computer and use it in GitHub Desktop.
Save mdsohelmia/fa42d8052f581a3d521a3a811b3f4ddd to your computer and use it in GitHub Desktop.
install-go
#!/bin/bash
set -e # Exit on error
# Detect OS (linux, darwin, windows)
OS_TYPE=$(uname | tr '[:upper:]' '[:lower:]')
# Detect Architecture (amd64, arm64, 386)
ARCH_TYPE=$(uname -m)
case "$ARCH_TYPE" in
x86_64) ARCH="amd64" ;;
arm64) ARCH="arm64" ;;
aarch64) ARCH="arm64" ;; # Some ARM systems use aarch64
i386 | i686) ARCH="386" ;;
*) echo "โŒ Unsupported architecture: $ARCH_TYPE"; exit 1 ;;
esac
# Detect shell (bash or zsh)
SHELL_RC=""
if [ "$SHELL" = "/bin/zsh" ] || [ "$SHELL" = "/usr/bin/zsh" ]; then
SHELL_RC="$HOME/.zshrc"
elif [ "$SHELL" = "/bin/bash" ] || [ "$SHELL" = "/usr/bin/bash" ]; then
SHELL_RC="$HOME/.bashrc"
else
SHELL_RC="$HOME/.profile" # Default fallback
fi
# Get the latest Go version dynamically
GO_VERSION=$(curl -s 'https://go.dev/VERSION?m=text' | awk -F 'go' '/^go/ {print $2}')
# Construct download URL
GO_TAR="go${GO_VERSION}.${OS_TYPE}-${ARCH}.tar.gz"
DOWNLOAD_URL="https://go.dev/dl/${GO_TAR}"
echo "๐Ÿ”น Detected OS: $OS_TYPE"
echo "๐Ÿ”น Detected Architecture: $ARCH"
echo "๐Ÿ”น Latest Go Version: $GO_VERSION"
echo "๐Ÿ”น Downloading: $DOWNLOAD_URL"
echo "Detected Shell: $SHELL_RC"
# Download the latest Go tarball
curl -LO "$DOWNLOAD_URL"
# Remove any existing Go installation
sudo rm -rf /usr/local/go
# Extract new Go installation
sudo tar -C "$INSTALL_DIR" -xzf "$GO_TAR"
# Clean up downloaded file
rm "$GO_TAR"
# Define the Go PATH entry
GO_PATH_ENTRY="export PATH=$INSTALL_DIR/go/bin:\$PATH"
# Check if the PATH entry already exists in the shell profile
if ! grep -qxF "$GO_PATH_ENTRY" "$SHELL_RC"; then
echo "$GO_PATH_ENTRY" >> "$SHELL_RC"
echo "โœ… PATH updated in $SHELL_RC"
else
echo "๐Ÿ”น PATH already exists in $SHELL_RC, skipping update."
fi
# Apply changes to the current session
# Apply changes to the current session safely (ShellCheck compliant)
if [ -f "$SHELL_RC" ]; then
# shellcheck source=/dev/null
source "$SHELL_RC"
fi
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment