自动安装Golang最新版本的Shell脚本

214 阅读1分钟
####################################
## 安装Golang
####################################

# 获取当前操作系统和架构
get_os_arch() {
    local os=$(uname | tr '[:upper:]' '[:lower:]')
    local arch="amd64"

    if [ "$os" = "darwin" ]; then
        os="darwin"
    elif [ "$os" = "linux" ]; then
        os="linux"
    else
        echo "Unsupported OS: $os"
        exit 1
    fi

    echo "$os $arch"
}

# 安装指定版本的Go
install_go() {
    local version=$1
    local os=$2
    local arch=$3

    echo "Downloading Go $version for $os-$arch..."
    wget -q https://go.dev/dl/$version.$os-$arch.tar.gz

    echo "Removing old Go version..."
    sudo rm -rf /usr/local/go
    echo "Installing..."
    sudo tar -C /usr/local -xzf $version.$os-$arch.tar.gz

    echo "Cleaning up..."
    rm $version.$os-$arch.tar.gz

    echo "Adding Go to PATH..."
    export PATH=$PATH:/usr/local/go/bin
    if [[ "$SHELL" == *"zsh"* ]]; then
        echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.zshrc
        source ~/.zshrc
    else
        echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.bashrc
        source ~/.bashrc
    fi

    echo "Go $version installed!"

    go version
}

# 获取本地Go的版本
get_go_local_version() {
    if ! command -v go &> /dev/null; then
        echo "Go is not installed!"
        return
    fi
    echo $(go version | awk '{print $3}')
}

# 获取最新版本的Go
get_go_latest_version() {
    echo $(curl -s https://go.dev/dl/?mode=json | jq -r '.[0].version')
}

GO_LOCAL_VERSION=$(get_go_local_version)
GO_LATEST_VERSION=$(get_go_latest_version)

echo "Current Go version: $GO_LOCAL_VERSION"

read OS ARCH <<< $(get_os_arch)

if [ "$GO_LOCAL_VERSION" = "$GO_LATEST_VERSION" ]; then
    echo "Go is already up to date!"
else
    echo "Installing Go $GO_LATEST_VERSION..."
    install_go $GO_LATEST_VERSION $OS $ARCH
fi