Last active
February 23, 2025 08:41
-
-
Save mdsohelmia/fa42d8052f581a3d521a3a811b3f4ddd to your computer and use it in GitHub Desktop.
install-go
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/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