如何在Golang中查看模块缓存位置_Golang模块缓存机制说明
技术百科
P粉602998670
发布时间:2026-01-19
浏览: 次 Go模块缓存分两处:$GOPATH/pkg/mod存源码,$GOCACHE存编译中间文件;需用go env查看真实路径,清理应优先用go clean -modcache而非手动删除。
Go 模块缓存路径由 GOPATH 和 GOCACHE 共同决定
Go 1.11+ 默认启用模块模式后,依赖下载和构建产物会分别存放在两个位置:$GOPATH/pkg/mod 存放已下载的模块源码(go mod download 或 go build 触发),而 $GOCACHE(默认为 $HOME/Library/Caches/go-build macOS / $HOME/.cache/go-build Linux / %LocalAppData%\go-build Windows)存放编译中间对象(如 .a 文件)。两者不可混淆——删错位置会导致重复下载或重编译。
用 go env 查看真实缓存路径
直接运行命令获取当前环境下的实际路径,避免手动拼接出错:
go env GOPATH GOCACHE GOPROXY
重点关注输出中的:
-
GOPATH:若未设置,默认是$HOME/go;其子目录pkg/mod就是模块源码缓存根目录 -
GOCACHE:编译缓存路径,影响go test -count=1等是否命中缓存 -
GOPROXY:确认是否走代理,影响pkg/mod/cache/download/下的归档包来源
pkg/mod 目录结构不是扁平的,带校验和与版本重写
在 $GOPATH/pkg/mod 下看不到干净的 github.com/user/repo@v1.2.3 目录。真实结构是:
- 模块源码存于
cache/download/下,文件名含校验和(如github.com/user/repo/@v/v1.2.3.zip和.info、.mod) - 解压后路径类似
github.com/user/repo@v1.2.3-0.20250101000000-abcdef123456,其中时间戳+提交哈希是 go 自动生成的伪版本(pseudo-version) - 符号链接
github.com/user/repo@v1.2.3指向上述伪版本目录,供go list -m all等命令识别
这意味着不能靠「删掉某个版本文件夹」来清理特定模块——必须用 go clean -modcache,否则可能破坏模块完整性。
清理缓存要分场景,别一股脑 rm -rf pkg/mod
手动删除 pkg/mod 虽然能清空,但下次 go build 会重

replace 或 require ./local 的软链接状态。更稳妥的方式是:
- 仅清模块源码缓存:
go clean -modcache(推荐,保留GOCACHE编译结果) - 仅清编译缓存:
go clean -cache - 同时清两者:
go clean -modcache -cache - 想删某个模块?用
go mod download -json github.com/user/repo@v1.2.3先确认存在,再进pkg/mod/cache/download/手动删对应 zip/info/mod,但不建议常规操作
缓存路径本身不常变,但 GO111MODULE=off 时模块机制失效,pkg/mod 不会被使用——检查 go env GO111MODULE 是基础动作。
# 放在
# 但不
# windows
# 重写
# 自动生成
# 重点关注
# 而非
# app
# 清空
# mac
# linux
# js
# json
# go
# golang
# 对象
# macos
# git
# github
# require
# proxy
# count
# 默认为
# 两处
# 其子
相关栏目:
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
AI推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
SEO优化<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
技术百科<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
谷歌推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
百度推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
网络营销<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
案例网站<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
精选文章<?muma echo $count; ?>
】
相关推荐
- c++中的可变参数模板(variadic temp
- Win11系统更新后黑屏怎么办 Win11更新黑屏
- Windows如何使用注册表查找和删除项?(reg
- Windows10怎样设置家长控制_Windows
- Win11怎么格式化U盘_Win11系统U盘格式化
- Win11怎么关闭内容自适应亮度_Windows1
- php条件判断怎么写_ifelse和switchc
- Dapper的Execute方法的返回值是什么意思
- 如何使用Golang处理网络超时错误_Golang
- Win11怎么开启上帝模式_创建Windows 1
- Python对象比较与排序_魔术方法解析【教程】
- Win11怎么更改文件夹图标_自定义Win11文件
- Mac上的iMovie如何剪辑视频?(新手入门教程
- Win11怎么打开注册表_Windows 11注册
- 当网站SEO排名下降时,如何应对?
- Windows10系统怎么查看设备管理器_Win1
- Windows10如何更改鼠标图标_Win10鼠标
- Python函数接口文档化_自动化说明【指导】
- 如何使用Golang实现云原生应用弹性伸缩_自动应
- C#如何序列化对象为XML XmlSerializ
- 如何在Golang中实现服务熔断与限流_Golan
- Golang如何测试HTTP中间件_Golang
- 如何使用Golang recover捕获panic
- c++ nullptr与NULL区别_c++11空
- 如何使用 Python 合并文件夹内多个 Exce
- 如何在 Go 后端安全获取并验证前端存储的 JWT
- 如何在Golang中处理JSON字段缺失_Gola
- C++如何使用Qt创建第一个GUI窗口?(入门教程
- mac怎么安装字体_MAC添加第三方字体与字体册管
- Win11怎么开启远程桌面_Win11系统远程桌面
- Mac怎么设置登录项_Mac管理开机自启动程序【教
- Windows 11怎么设置默认解压软件_Wind
- Windows服务无法启动错误1067是什么_进程
- VSC怎么配置PHP的Xdebug_远程调试设置步
- C++友元类使用场景_C++类间协作设计方式讲解
- Windows10系统怎么查看运行时间_Win10
- 如何使用Golang匿名函数_快速定义临时函数逻辑
- Win10怎样安装Excel数据分析工具_Win1
- Win11怎么恢复出厂设置_Win11重置此电脑保
- 如何在 Go 中创建包含 map 的 slice(
- Mac如何修复应用程序权限问题_Mac磁盘工具修复
- Windows 11怎么更改锁屏超时时间_Wind
- Win11怎么关闭开机声音_Win11系统启动提示
- c++的mutex和lock_guard如何使用
- Django密码修改后会话失效的解决方案
- Win11怎么设置任务栏透明_Windows11使
- Windows10系统服务优化指南_Win10禁用
- Windows10系统怎么查看显卡驱动_Win10
- Windows11怎么用“记事本”自动换行与编码
- Win10如何卸载自带Edge_Win10彻底卸载

QQ客服