Press "Enter" to skip to content

开发机多版本go+vscode配置

内容目录

背景

在项目开发过程中,难免会伴随开发语言的升级和项目的交接,这过程中项目的开发语言版本不一致不可避免,那么就涉及到怎么进行开发语言的多版本配置,让开发机可以多版本共存,这里以go为例,其他语言原理类似。

go版本配置

这里我写成了一个shell脚本

#!/bin/bash

# ==============================================================================
# 脚本功能: 自动下载、安装并配置指定版本的 Go 语言环境
# 运行环境: Debian / Ubuntu (需要 sudo 权限)
# 使用方法: sudo ./install_go.sh <版本号>
# 示例:     sudo ./install_go.sh 1.19.9
# ==============================================================================

# --- 脚本安全设置 ---
# -e: 如果任何命令返回非零退出状态,立即退出脚本
# -u: 如果尝试使用未声明的变量,视为错误并立即退出
# -o pipefail: 如果管道中的任何命令失败,则整个管道的退出状态为失败
set -euo pipefail

# --- 变量定义 ---
# 从命令行第一个参数获取 Go 版本号
GO_VERSION=${1-} # 使用 ${1-} 避免在未提供参数时触发 set -u

# 下载和安装路径
DOWNLOAD_DIR=/root/chenjiesoft
INSTALL_DIR=/usr/local

# 检查是否以 root 用户运行
if [ $(id -u) -ne 0 ]; then
  echo 错误:此脚本需要以 root 权限运行。请使用 'sudo'。 >&2
  exit 1
fi

# 检查是否提供了版本号参数
if [ -z $GO_VERSION ]; then
  echo 错误:请提供 Go 的版本号作为参数。 >&2
  echo 用法: sudo $0 <版本号> >&2
  echo 示例: sudo $0 1.19.9 >&2
  exit 1
fi

# --- 动态生成变量 ---
# 根据完整版本号生成主次版本号 (例如 1.19.9 -> 1.19)
GO_MAJOR_MINOR_VERSION=$(echo $GO_VERSION | cut -d'.' -f1,2)

# 最终安装路径 (例如 /usr/local/go1.19)
FINAL_GO_PATH=${INSTALL_DIR}/go${GO_MAJOR_MINOR_VERSION}

# 下载文件名和URL
FILENAME=go${GO_VERSION}.linux-amd64.tar.gz
DOWNLOAD_URL=https://mirrors.aliyun.com/golang/${FILENAME}

# --- 主逻辑开始 ---

echo --- 开始安装 Go 版本: ${GO_VERSION} ---

# 1. 创建下载目录
echo [1/6] 检查并创建下载目录: ${DOWNLOAD_DIR}
mkdir -p ${DOWNLOAD_DIR}

# 2. 下载 Go 安装包
echo [2/6] 正在从阿里云镜像站下载 Go 安装包...
echo       URL: ${DOWNLOAD_URL}
wget -c -P ${DOWNLOAD_DIR} ${DOWNLOAD_URL}
echo       下载完成。

# 3. 清理旧的安装
echo [3/6] 清理可能存在的旧版本...
# 如果目标目录存在,先删除
if [ -d ${FINAL_GO_PATH} ]; then
  echo       发现已存在的目录 ${FINAL_GO_PATH},正在删除...
  rm -rf ${FINAL_GO_PATH}
fi
# 解压时会生成一个名为 go 的目录,如果它存在也一并删除,防止冲突
if [ -d ${INSTALL_DIR}/go ]; then
    echo       发现临时的 ${INSTALL_DIR}/go 目录,正在删除...
    rm -rf ${INSTALL_DIR}/go
fi
echo       清理完成。

# 4. 解压到 /usr/local
echo [4/6] 正在解压 ${FILENAME} 到 ${INSTALL_DIR} ...
tar -C ${INSTALL_DIR} -xzf ${DOWNLOAD_DIR}/${FILENAME}
echo       解压完成。

# 5. 重命名目录
echo [5/6] 正在重命名 ${INSTALL_DIR}/go 为 ${FINAL_GO_PATH} ...
mv ${INSTALL_DIR}/go ${FINAL_GO_PATH}
echo       重命名完成。

# 6. 使用新的 Go 环境配置 GOPROXY
echo [6/6] 正在使用新的 Go 执行文件配置 GOPROXY...
# 使用新安装的 go 命令设置全局 GOPROXY
# 推荐使用 goproxy.cn,它是专为中国开发者服务的代理
${FINAL_GO_PATH}/bin/go env -w GO111MODULE=on
${FINAL_GO_PATH}/bin/go env -w GOPROXY=https://goproxy.cn,direct

echo 
echo --- Go ${GO_VERSION} 安装和配置成功! ---
echo 

# 验证 GOPROXY 是否设置成功
echo 验证 GOPROXY 设置:
${FINAL_GO_PATH}/bin/go env | grep GOPROXY

脚本内容根据命令输入的版本去镜像站,这里我找的是阿里的镜像源速度会比较快,下载对应版本的go到指定目录,然后对指定版本设置环境变量,主要是设置GOPROXY进行mod的加速。

这里给出一个安装的输出示例可以参考:

# sudo ./install_go.sh 1.19.9
--- 开始安装 Go 版本: 1.19.9 ---
[1/6] 检查并创建下载目录: /root/chenjiesoft
[2/6] 正在从阿里云镜像站下载 Go 安装包...
      URL: https://mirrors.aliyun.com/golang/go1.19.9.linux-amd64.tar.gz
--2025-07-24 14:10:35--  https://mirrors.aliyun.com/golang/go1.19.9.linux-amd64.tar.gz
Resolving mirrors.aliyun.com (mirrors.aliyun.com)... 47.123.21.201, 47.123.21.200, 47.123.21.204, ...
Connecting to mirrors.aliyun.com (mirrors.aliyun.com)|47.123.21.201|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 149067328 (142M) [application/octet-stream]
Saving to: ‘/root/chenjiesoft/go1.19.9.linux-amd64.tar.gz’

go1.19.9.linux-amd64.tar.gz                       100%[===========================================================================================================>] 142.16M  9.97MB/s    in 14s

2025-07-24 14:10:50 (9.84 MB/s) - ‘/root/chenjiesoft/go1.19.9.linux-amd64.tar.gz’ saved [149067328/149067328]

      下载完成。
[3/6] 清理可能存在的旧版本...
      清理完成。
[4/6] 正在解压 go1.19.9.linux-amd64.tar.gz 到 /usr/local ...
      解压完成。
[5/6] 正在重命名 /usr/local/go 为 /usr/local/go1.19 ...
      重命名完成。
[6/6] 正在使用新的 Go 执行文件配置 GOPROXY...

--- Go 1.19.9 安装和配置成功! ---

验证 GOPROXY 设置:
GOPROXY=https://goproxy.cn,direct

使用vscode配置项目的go版本

在项目文件夹新建.vscode文件夹,在里面添加settings.json

{
  go.goroot: /usr/local/go1.19,
  terminal.integrated.env.linux: {
    GOROOT: /usr/local/go1.19,
    PATH: /usr/local/go1.19/bin:${env:PATH}
  }
}

配置好重新打开这个文件夹vscode会自动加载配置生效,然后在vscode的终端go env 就可以看到此时项目的go语言和settings.json配置的就是一样的。

我的博客即将同步至腾讯云开发者社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=2l6n4xdre96og

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注