Posted in

Go环境卸载后仍报错?这7处隐藏路径(含GOPATH缓存、go/bin软链接、shell配置)必须手动清除

第一章:如何卸载go语言环境包

卸载 Go 语言环境需彻底清除二进制文件、环境变量配置及缓存数据,避免残留影响后续安装或系统其他工具链。不同安装方式对应不同的清理策略,以下按主流方式分类说明。

通过官方二进制包安装的卸载方法

若从 https://go.dev/dl/ 下载 .tar.gz 包并解压至 /usr/local/go,执行以下命令:

# 删除 Go 安装目录(需 root 权限)
sudo rm -rf /usr/local/go

# 清理 GOPATH 和 GOROOT 相关环境变量(检查 ~/.bashrc、~/.zshrc 或 /etc/profile)
# 示例:编辑 shell 配置文件,删除或注释包含以下内容的行
# export GOROOT=/usr/local/go
# export GOPATH=$HOME/go
# export PATH=$GOROOT/bin:$GOPATH/bin:$PATH

⚠️ 注意:修改配置文件后,运行 source ~/.zshrc(或对应 shell 配置)使变更生效,并建议重启终端验证 go version 是否报错 command not found。

通过包管理器安装的卸载方法

系统类型 卸载命令
Ubuntu/Debian sudo apt remove golang-go && sudo apt autoremove
macOS (Homebrew) brew uninstall go
CentOS/RHEL sudo yum remove golang 或 sudo dnf remove golang-bin

清理用户级开发痕迹

Go 默认在用户目录下生成缓存与模块数据,建议一并清理:

# 删除模块缓存(含下载的依赖包)
rm -rf $HOME/go/pkg/mod

# 删除编译缓存与构建输出
rm -rf $HOME/go/pkg $HOME/go/bin

# 可选:清除 go env 中可能残留的自定义路径(如 GOPATH)
go env -w GOPATH=""  # 重置为默认值($HOME/go),或使用 go env -u GOPATH 彻底取消设置

最后,运行 which go 和 go env GOROOT 确认无输出或返回空值,表明 Go 运行时已完全移除。若项目中曾使用 go install 安装过 CLI 工具(如 gopls、delve),需单独执行 go install <tool>@latest 后加 -u 参数卸载(如 go install golang.org/x/tools/gopls@latest → 实际卸载需 go install golang.org/x/tools/gopls@none)。

第二章:彻底清除Go核心安装路径与残留二进制文件

2.1 定位并删除 /usr/local/go 或自定义安装目录(理论:Go官方安装机制与路径绑定原理;实践:find + rm -rf 安全清理)

Go 的二进制分发包采用静态路径绑定机制:GOROOT 默认指向解压目录(如 /usr/local/go),且 go 命令在编译时硬编码了该路径的相对符号表,因此移动或重命名会导致 go env GOROOT 失效。

安全定位策略

优先使用 go env GOROOT 确认当前生效路径,再辅以 find 排查残留:

# 查找所有疑似 Go 安装目录(排除 /home 下用户级 GOPATH)
sudo find /usr /opt -maxdepth 3 -type d -name "go" -path "*/go/bin" 2>/dev/null | xargs dirname

✅ -maxdepth 3 防止深度遍历拖慢系统;-path "*/go/bin" 精准匹配二进制入口,避免误删同名目录;2>/dev/null 抑制权限拒绝噪音。

清理前校验表

路径 是否为 GOROOT 是否含 bin/go 建议操作
/usr/local/go 是 ✅ sudo rm -rf
/opt/go-1.21.0 否(旧版本) ✅ 删除
/home/user/go 否(GOPATH) ❌ 保留

执行流程

graph TD
    A[go env GOROOT] --> B{路径存在?}
    B -->|是| C[验证 bin/go 可执行]
    B -->|否| D[find 全局扫描]
    C --> E[rm -rf 确认路径]
    D --> E

2.2 清理/usr/bin、/usr/local/bin中残留的go、gofmt等硬链接或复制文件(理论:PATH优先级与可执行文件覆盖机制;实践:which go + ls -l验证 + selective rm)

当系统存在多版本 Go 时,/usr/bin/go 或 /usr/local/bin/go 可能是旧版硬链接或静态复制文件,会因 PATH 中靠前路径优先匹配而覆盖新版(如 SDK Manager 安装的 /usr/local/go/bin/go)。

验证当前生效路径

$ which go
/usr/bin/go  # ← 此路径需重点检查

该命令返回首个匹配路径,反映实际调用来源。

检查文件类型与来源

$ ls -l $(which go)
lrwxrwxrwx 1 root root 12 Jan 10 14:22 /usr/bin/go -> /usr/local/go-1.19/bin/go

若为指向旧版的硬链接或独立复制文件(非符号链接且 size > 0),即为清理目标。

安全清理策略

  • ✅ 允许删除:/usr/bin/go、/usr/bin/gofmt 等非 SDK 管理的副本
  • ❌ 禁止删除:/usr/local/go/bin/*(官方 SDK 核心目录)
路径 类型 是否可删
/usr/bin/go 独立二进制 ✅
/usr/local/bin/gofmt 硬链接 ✅
/usr/local/go/bin/go SDK 主入口 ❌
graph TD
A[which go] --> B{ls -l 输出分析}
B -->|指向旧版或独立文件| C[rm -i /usr/bin/go]
B -->|指向 /usr/local/go/bin/| D[保留不操作]

2.3 删除系统级Go模块缓存($GOROOT/pkg/mod)及校验数据库(理论:Go 1.11+ module cache结构与go clean -modcache行为边界;实践:手动递归清除+权限校验)

Go 1.11 引入模块模式后,$GOROOT/pkg/mod 成为全局只读缓存区,go clean -modcache 默认仅清理 $GOPATH/pkg/mod,对 $GOROOT/pkg/mod 无影响——这是关键行为边界。

缓存结构本质

  • cache/:压缩包(.zip)与解压源码(/cache/download/.../unpacked/)
  • sumdb/:校验数据库(sum.golang.org 镜像,含 go.sum 签名验证数据)

安全清除流程

# 先校验所有权与权限(避免误删系统文件)
ls -ld "$GOROOT/pkg/mod"
# ✅ 应为 root:root 且权限 755;若属普通用户,需跳过或提权
sudo rm -rf "$GOROOT/pkg/mod" "$GOROOT/pkg/sumdb"

⚠️ rm -rf 无回收站,-f 抑制提示但不跳过权限检查;sudo 确保绕过 chmod -w 保护。

go clean 行为对比表

命令 清理 $GOPATH/pkg/mod 清理 $GOROOT/pkg/mod 清理 sumdb
go clean -modcache ✅ ❌(静默忽略) ❌
go clean -cache -modcache ✅ ❌ ❌(-cache 不含 sumdb)
graph TD
    A[执行清除] --> B{是否操作 $GOROOT?}
    B -->|是| C[必须 sudo + 手动 rm -rf]
    B -->|否| D[go clean -modcache 安全可用]
    C --> E[校验 ls -ld 权限后执行]

2.4 处理macOS上Homebrew安装的Go残留(理论:Homebrew uninstall依赖图与pkgutil注册机制;实践:brew uninstall go + brew autoremove + pkgutil –files验证)

Homebrew 卸载 go 时仅移除其自身 Formula 安装的二进制与符号链接,不清理通过 go install 或 go build -o /usr/local/bin/... 手动部署的可执行文件,亦不触碰系统级 pkg 注册信息。

Homebrew 卸载与依赖清理流程

# 彻底移除 go 及其无用依赖(如旧版 gcc、gdb 等间接依赖)
brew uninstall go
brew autoremove  # 清理因 go 移除而变为孤立的 formula

brew uninstall go 依据 Formula 的 depends_on 构建反向依赖图,仅卸载显式声明的直接依赖;brew autoremove 则扫描 brew deps --reverse 输出,识别并移除当前无任何 formula 引用的 formula。

验证系统级残留

# 检查 macOS Installer 数据库中是否仍注册 Go 相关包
pkgutil --files org.golang.go | head -n 5

pkgutil --files 查询 /var/db/receipts/ 中的 .plist 注册项,若输出非空,说明 Homebrew 未接管 pkg 安装路径(常见于早期 brew install --cask go 或手动 pkg 安装),需配合 pkgutil --forget 清理。

机制 覆盖范围 是否自动清理 pkg 注册
brew uninstall Formula 管理的 /opt/homebrew/... ❌
pkgutil --forget /Library/Developer/... 等系统路径 ✅(需手动)
graph TD
    A[brew uninstall go] --> B[移除 /opt/homebrew/bin/go 等]
    A --> C[保留 /usr/local/bin/mytool]
    B --> D[brew autoremove]
    D --> E[清理孤立依赖如 libmpc]
    F[pkgutil --files] --> G[暴露遗留 pkg receipt]
    G --> H[pkgutil --forget org.golang.go]

2.5 清理Linux发行版包管理器(apt/yum/dnf)安装的Go包及其配置文件(理论:deb/rpm包元数据与config文件保留策略;实践:dpkg -L golang-go / rpm -ql golang –dump + /etc/go.conf等配置项人工核查)

包管理器差异与配置留存逻辑

Debian系(.deb)默认不自动删除配置文件(如 /etc/go.conf),除非显式使用 --purge;RPM系(.rpm)则依据 %config(noreplace) 标记决定是否保留——带该标记的文件被修改后不会被覆盖,卸载时亦常保留。

实践核查路径

# Debian/Ubuntu:列出golang-go包所有文件(含配置)
dpkg -L golang-go | grep -E '(/etc|\.conf$|\.d/)'

dpkg -L 输出完整文件清单;grep 筛选配置相关路径。若 /etc/go.conf 存在且未被标记为 conffile(可通过 dpkg -s golang-go | grep Conflicts 辅助验证),需手动清理。

# RHEL/CentOS/Fedora:检查golang包文件详情及校验和
rpm -ql golang --dump | awk '$NF ~ /^c$/ {print $1}'

--dump 输出每文件元数据;$NF ~ /^c$/ 匹配末字段为 c(即 config 文件),精准定位需人工审查的配置项。

关键配置项核查表

路径 类型 是否应保留 判定依据
/etc/go.conf 配置文件 否(若未自定义) 默认为空或仅注释,非用户修改
/usr/lib/go/src 只读源码 是 属于运行时依赖,卸载时不应删

清理决策流程

graph TD
    A[执行 apt remove golang-go 或 dnf remove golang] --> B{是否含 --purge 或 --noscripts?}
    B -->|是| C[自动删除 /etc 下 conffiles]
    B -->|否| D[保留 /etc/go.conf 等配置]
    D --> E[人工 diff /etc/go.conf 与包默认内容]
    E -->|无差异| F[安全 rm /etc/go.conf]

第三章:深度清理GOPATH相关用户级状态与缓存

3.1 彻底删除GOPATH指定工作区(理论:GOPATH历史语义与Go 1.16+默认模式兼容性;实践:rm -rf $GOPATH + GODEBUG=gocacheverify=1验证缓存失效)

GOPATH的语义变迁

Go 1.11 引入模块(module)后,GOPATH 从必需工作区根目录降级为兼容性兜底路径;至 Go 1.16,GO111MODULE=on 成为默认,GOPATH 仅影响 go install 无 module 路径时的 bin 目录,及 GOROOT 外的旧式 $GOPATH/src 构建逻辑。

彻底清理命令

# 删除整个 GOPATH 工作区(含 src/pkg/bin)
rm -rf "$GOPATH"

# 强制验证构建缓存是否失效(Go 1.16+)
GODEBUG=gocacheverify=1 go list -m all 2>/dev/null || echo "缓存已清空"

rm -rf "$GOPATH" 直接移除所有用户级 Go 源码、包对象与可执行文件;GODEBUG=gocacheverify=1 启用缓存校验模式——若缓存中存在依赖于已删 $GOPATH/src 的 stale build ID,go list 将失败,从而实证清理有效性。

验证状态对比表

状态项 清理前 清理后
go env GOPATH /home/user/go 仍输出路径(环境变量未变)
go list -m all 包含 golang.org/x/net 等 GOPATH 模块 仅显示 mod 根模块及 proxy 下载项
graph TD
    A[执行 rm -rf $GOPATH] --> B[清除 src/pkg/bin]
    B --> C[GODEBUG=gocacheverify=1 触发校验]
    C --> D{缓存中是否存在 GOPATH 源码引用?}
    D -- 是 --> E[go 命令报错:build ID mismatch]
    D -- 否 --> F[验证通过:缓存已重建]

3.2 清除~/.cache/go-build与~/.cache/go-download(理论:构建缓存哈希算法与下载缓存生命周期;实践:go clean -cache -modcache后仍需手动清理隐藏目录)

Go 的构建缓存 ~/.cache/go-build 基于源码、编译器标志、GOOS/GOARCH 等 23+ 输入因子生成 SHA256 哈希键;而 ~/.cache/go-download 则按模块路径+版本+校验和分层存储,但不自动过期——即使模块被 go mod tidy 移除,其 zip 与 sum 文件仍静默驻留。

构建缓存失效边界

  • 修改 CGO_ENABLED=0 → 新哈希键,旧缓存不可复用
  • //go:build 标签变更 → 触发全量重编译

手动清理必要性验证

# 查看残留的已弃用模块下载物(go clean -modcache 不清理此目录)
ls -lh ~/.cache/go-download/cache/
# 输出示例:golang.org/x/net/@v/v0.12.0.zip  (模块早已从 go.mod 移除)

该命令暴露 go clean -modcache 仅清空 $GOMODCACHE(默认 ~/go/pkg/mod),对 ~/.cache/go-download 完全无影响。

缓存类型 清理命令是否覆盖 生命周期机制
~/.cache/go-build go clean -cache ✅ LRU + 90天未访问自动淘汰
~/.cache/go-download ❌(需手动) 永久保留,无自动清理逻辑
graph TD
    A[go build] --> B{计算输入哈希}
    B --> C[源码AST+flags+env]
    B --> D[生成key: sha256(...)]
    D --> E[命中 ~/.cache/go-build/xx/yy]
    E --> F[复用对象文件]

3.3 检查并移除IDE(VS Code/GoLand)自动创建的.gopath、.go目录及workspace settings(理论:IDE对GOPATH/GOROOT的隐式继承逻辑;实践:grep -r “GOROOT|GOPATH” ~/.config/Code/ + .idea/workspace.xml定位)

IDE的隐式环境继承机制

现代Go IDE(如VS Code、GoLand)为兼容旧版Go工具链,会自动探测并缓存 GOROOT/GOPATH 路径,写入私有配置目录(如 ~/.config/Code/ 或 .idea/),导致项目行为与 go env 输出不一致。

快速定位污染源

# 扫描VS Code用户配置中硬编码的Go路径
grep -r "GOROOT\|GOPATH" ~/.config/Code/ 2>/dev/null | head -5
# 输出示例:~/.config/Code/User/settings.json:"go.goroot": "/usr/local/go"

该命令递归检索所有含关键词的JSON/XML配置,2>/dev/null 抑制权限错误;head -5 避免长输出干扰。

GoLand workspace.xml 中的典型痕迹

文件位置 关键字段示例 风险等级
.idea/workspace.xml <option name="GOROOT" value="/opt/go" /> ⚠️ 高

清理流程(安全优先)

  • ✅ 备份 ~/.config/Code/User/settings.json 和 .idea/ 目录
  • ✅ 删除 ~/.gopath、~/.go 等非标准目录
  • ❌ 不直接修改 GOROOT——应由 go install 或 SDK管理器统一控制
graph TD
    A[启动IDE] --> B{检测GOROOT/GOPATH}
    B -->|存在旧配置| C[写入私有settings]
    B -->|无配置| D[读取系统go env]
    C --> E[覆盖真实环境变量]

第四章:修复Shell环境与终端会话中的Go残留配置

4.1 审计所有shell初始化文件(~/.bashrc、~/.zshrc、/etc/profile等)中Go相关PATH/GOROOT/GOPATH导出语句(理论:shell启动流程与配置文件加载顺序;实践:grep -nE “(GOROOT|GOPATH|go/bin)”查找+sed -i删除)

Shell启动时的配置加载链

交互式登录 shell 依次读取 /etc/profile → ~/.bash_profile/~/.zshenv → ~/.bashrc/~/.zshrc,非登录 shell(如终端新标签页)通常仅加载 ~/.bashrc 或 ~/.zshrc。混用多版本 Go 时,重复或冲突的 export GOROOT=... 易导致 go version 与 which go 不一致。

快速定位污染源

# 递归扫描所有常见初始化文件中的Go环境变量定义
grep -nE "(GOROOT|GOPATH|go/bin)" ~/.bashrc ~/.zshrc /etc/profile /etc/profile.d/*.sh 2>/dev/null

-n 输出行号便于精确定位;-E 启用扩展正则匹配三类关键词;2>/dev/null 屏蔽权限拒绝错误。结果可快速识别冗余或过期路径。

安全清理策略

文件类型 是否建议直接修改 说明
/etc/profile ❌ 谨慎 系统级配置,需sudo且验证影响范围
~/.bashrc ✅ 推荐 用户级,修改后 source ~/.bashrc 即生效
# 删除含 go/bin 的行(保留注释与空行)
sed -i '/go\/bin/d' ~/.bashrc

-i 原地编辑;/go\/bin/d 匹配含 go/bin 的整行并删除——注意斜杠转义。务必先备份:cp ~/.bashrc ~/.bashrc.bak。

4.2 清理shell函数定义(如goenv、gvm等工具注入的go命令封装)(理论:function vs alias执行优先级与环境隔离性;实践:declare -f | grep go + unset -f批量清除)

函数优先于alias的执行链路

Shell中命令解析顺序为:function > alias > builtin > $PATH。goenv或gvm常通过function go()劫持原生go,导致which go仍显示/usr/local/go/bin/go,但实际执行的是封装逻辑——这破坏了构建可复现性。

快速识别与清除

# 列出所有含"go"的函数定义(含goenv/gvm等)
declare -f | grep -E '^[a-zA-Z_][a-zA-Z0-9_]*[[:space:]]*\(\)|^go[[:space:]]*\(\)' | head -5
# 批量清除(安全起见先确认)
unset -f $(declare -F | awk '$2 ~ /^go/ {print $2}')

declare -F仅输出函数名列表(高效),awk精准匹配以go开头的函数(如go, goenv, gvm_go),避免误删golangci-lint等非目标函数。

执行优先级对比表

类型 覆盖方式 是否影响子shell 环境隔离性
function function go(){...} ✅ 继承 ❌ 全局污染
alias alias go='...' ❌ 不继承 ⚠️ 仅当前shell
graph TD
    A[用户输入 go build] --> B{Shell解析器}
    B --> C[查找function go?]
    C -->|是| D[执行封装逻辑]
    C -->|否| E[查找alias go?]
    E -->|是| F[展开alias]
    E -->|否| G[查$PATH]

4.3 删除go/bin软链接及其父目录(理论:软链接跨版本污染与PATH劫持风险;实践:ls -la ~/go/bin + readlink -f确认目标 + unlink + rmdir安全移除)

软链接污染的本质

当 ~/go/bin 是指向旧版 Go SDK 的软链接(如 ~/go-1.20.5/bin),而新版本安装后未更新该链接,PATH 中的 ~/go/bin 会持续加载过时工具(如 go, gofmt),导致构建行为不一致甚至静默失败。

安全移除四步法

# 1. 查看软链接本身及真实路径
ls -la ~/go/bin
# 输出示例:bin -> /home/user/go-1.20.5/bin

# 2. 确认目标路径(避免误删)
readlink -f ~/go/bin
# 输出:/home/user/go-1.20.5/bin

# 3. 解除软链接(仅删除符号链接文件)
unlink ~/go/bin

# 4. 安全删除空父目录(仅当为空时成功)
rmdir ~/go

unlink 严格只删符号链接本身,不递归;rmdir 拒绝非空目录,天然防误删。两命令组合构成幂等清理。

命令 作用 安全性保障
ls -la 显式暴露链接关系 避免盲删
readlink -f 解析绝对真实路径 防止路径歧义
unlink 原子删除符号链接 不影响目标目录
rmdir 仅当空才成功 强制人工校验

4.4 重置shell会话并验证环境变量彻底清空(理论:子shell继承机制与export -p输出可信度;实践:exec $SHELL -l + env | grep -i go + go version确认命令不可用)

子shell的继承边界

父shell中export的变量仅传递给直接子进程,但exec $SHELL -l会完全替换当前进程,启动全新登录shell,不继承任何非/etc/environment或~/.profile中声明的变量。

验证步骤

执行以下命令链:

exec $SHELL -l  # 替换当前shell,加载完整配置文件(含/etc/profile, ~/.bash_profile等)
env | grep -i go  # 检查GO*相关变量是否残留
go version      # 应报错:command not found

exec $SHELL -l 中 -l(login)标志强制读取系统级和用户级初始化脚本;若go仍可用,说明GOROOT/PATH被硬编码在/etc/profile.d/某脚本中,而非临时export。

export -p 的局限性

输出来源 是否反映真实环境? 原因
export -p ✅ 显示当前shell导出变量 仅作用域内有效,不体现exec后新会话状态
env ✅ 真实运行时环境快照 包含所有继承变量(含非exported但被子进程接收的)
graph TD
    A[原始shell] -->|export GOBIN=/usr/local/go/bin| B[子shell]
    A -->|exec $SHELL -l| C[全新登录shell]
    C --> D[仅加载/etc/profile及~/.profile]
    D --> E[无临时export变量]

第五章:如何卸载go语言环境包

卸载 Go 语言环境并非简单删除二进制文件即可,需系统性清理安装路径、环境变量、缓存及配置残留。以下为覆盖主流操作系统(Linux/macOS/Windows)的完整卸载流程,全部基于真实终端操作验证。

确认当前Go安装方式

首先判断安装来源:通过官方二进制包安装(推荐)、包管理器(如 apt/brew/choco)或源码编译。执行以下命令识别:

which go
go env GOROOT
echo $PATH | grep -o '/usr/local/go\|/opt/go\|/usr/lib/go'

Linux/macOS:官方二进制包卸载步骤

  1. 删除核心安装目录(默认 /usr/local/go):
    sudo rm -rf /usr/local/go
  2. 清理 $GOPATH(通常为 ~/go):
    rm -rf ~/go
  3. 从 shell 配置文件中移除环境变量(检查 ~/.bashrc、~/.zshrc 或 /etc/profile):
    sed -i '/export GOROOT/d' ~/.zshrc
    sed -i '/export GOPATH/d' ~/.zshrc
    sed -i '/\/usr\/local\/go\/bin/d' ~/.zshrc
    source ~/.zshrc

Windows:PowerShell彻底清理方案

  • 卸载控制面板中若存在“Go for Windows”条目,先执行标准卸载;
  • 手动删除以下路径(以管理员权限运行 PowerShell):
    Remove-Item -Path "$env:ProgramFiles\Go" -Recurse -Force -ErrorAction SilentlyContinue
    Remove-Item -Path "$env:USERPROFILE\go" -Recurse -Force -ErrorAction SilentlyContinue
  • 清理系统环境变量:
    $path = [System.Environment]::GetEnvironmentVariable("PATH", "Machine") -replace ";?C:\\Program Files\\Go\\bin", ""
    [System.Environment]::SetEnvironmentVariable("PATH", $path, "Machine")

验证卸载完整性

检查项 预期结果 命令
go version command not found go version
GOROOT 空输出 echo $GOROOT(Linux/macOS)
go env GOROOT go: unknown subcommand go env GOROOT

清理模块缓存与构建产物

即使卸载 Go,$GOCACHE 和 $GOMODCACHE 可能残留数GB数据:

# Linux/macOS
rm -rf $(go env GOCACHE) $(go env GOMODCACHE) 2>/dev/null || echo "Cache directories already removed"

# Windows(PowerShell)
Remove-Item -Path "$env:GOCACHE", "$env:GOMODCACHE" -Recurse -Force -ErrorAction SilentlyContinue

包管理器安装的特殊处理

包管理器 卸载命令
Ubuntu sudo apt remove golang-go && sudo apt autoremove
macOS brew uninstall go
Windows choco uninstall golang
flowchart TD
    A[启动卸载流程] --> B{检测安装方式}
    B -->|官方二进制| C[删除GOROOT/GOPATH]
    B -->|包管理器| D[调用对应卸载命令]
    C --> E[清理环境变量]
    D --> E
    E --> F[清除模块缓存]
    F --> G[验证go命令失效]
    G --> H[检查PATH无go路径]

多版本共存场景的精准卸载

若使用 gvm 或 asdf 管理多版本,必须进入对应工具上下文:

# asdf 卸载指定版本
asdf uninstall golang 1.21.5
asdf global golang 1.20.7  # 切换默认版本而非完全卸载

# gvm 清理
gvm uninstall go1.19.13
gvm reset

Docker开发环境中的Go清理

在容器化工作流中,需同步清理镜像层缓存:

# 构建时避免残留Go环境
FROM ubuntu:22.04
RUN apt-get update && apt-get install -y curl && \
    curl -L https://go.dev/dl/go1.21.5.linux-amd64.tar.gz | tar xz -C /usr/local && \
    rm -f go1.21.5.linux-amd64.tar.gz && \
    export PATH=$PATH:/usr/local/go/bin && \
    go version
# 构建后镜像中仅保留运行时依赖,不保留SDK

Go语言老兵,坚持写可维护、高性能的生产级服务。

发表回复

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