当前位置: 首页 > news >正文

GO语言 go get 下载 下来的包存放在哪里

在 Go 中,通过 go get(或 Go Modules 下的自动下载)获取的第三方包,具体存储位置取决于你是否启用了 Go Modules(推荐方式)


✅ 1. 如果你使用了 Go Modules(Go 1.11+ 默认开启)

当前 Go 开发强烈建议使用模块管理(Go Modules)

第三方包存放路径:

$GOPATH/pkg/mod/

示例:

~/go/pkg/mod/github.com/gin-gonic/gin@v1.8.1/
  • 下载的每个模块都以 模块名@版本号 形式存储
  • 模块是 只读的,防止污染依赖
  • $GOPATH 默认为 ~/go,除非你手动设置了 GOPATH

查看 GOPATH:

go env GOPATH

✅ 2. 如果你没有启用 Go Modules(旧方式)

不推荐:老项目才用 $GOPATH/src/ 模式

下载的包会被放到:

$GOPATH/src/

示例:

~/go/src/github.com/gin-gonic/gin/

你可以直接看到源码,但这依赖老式的包管理方式,不建议新项目使用。


✅ 快速总结

是否启用 Go Modules下载目录示例路径
✅ 是(默认)$GOPATH/pkg/mod~/go/pkg/mod/github.com/foo/bar@v1.2.3/
❌ 否(老式 GOPATH)$GOPATH/src~/go/src/github.com/foo/bar/

✅ 查看某个包的位置(直接命令)

go list -m -f '{{.Dir}}' github.com/gin-gonic/gin

输出示例:

/Users/yourname/go/pkg/mod/github.com/gin-gonic/gin@v1.8.1

如你不确定是否在使用 Go Modules,可以检查当前目录下是否有 go.mod 文件。

需要我教你如何管理依赖或清理旧包(类似 npm 的 npm prune)也可以告诉我。

是的,Go 下载的第三方依赖包的存储位置是可以更改的,通过设置环境变量控制。下面分别说明如何更改这两个位置:


✅ 1. 更改 $GOPATH(影响 pkg/mod 和旧式 src/

默认情况下:

$GOPATH 默认为 ~/go

你可以通过设置 GOPATH 来更改下载目录:

✅ Linux / macOS:
export GOPATH=/your/custom/path

你可以把它加进 ~/.bashrc~/.zshrc 中:

export GOPATH=$HOME/dev/go
✅ Windows (PowerShell):
$env:GOPATH = "D:\GoWorkspace"

或者设置系统环境变量。

更改后:

  • 下载的依赖包将放在:

    $GOPATH/pkg/mod/
    
  • 你的项目默认也会找 $GOPATH/pkg/mod 作为模块缓存路径。


✅ 2. 更改 Go Module 缓存目录(不建议改,但可以

如果你只想更改 Go Module 缓存位置,而不想影响整个 GOPATH,也可以设置:
GOMODCACHE

export GOMODCACHE=/your/custom/modcache

默认是:

$GOPATH/pkg/mod

设置后,模块缓存目录变为你自定义的位置。


✅ 3. 查看当前设置:

go env GOPATH
go env GOMODCACHE

✅ 示例:完整更改方式

export GOPATH=$HOME/my-go
export GOMODCACHE=$HOME/my-go-modcache

🚫 注意事项

  • 不建议把 Go 模块缓存放在项目目录里,避免污染或版本冲突。
  • 如果你修改了 GOPATH,请确保你在使用 go installgo build 等时也在一个有效的 Go 项目内。

是否需要我为你生成一个包含自定义 GOPATH 的项目初始化脚本?比如自动设置环境变量和初始化 go.mod

http://www.dtcms.com/a/301639.html

相关文章:

  • 线程安全问题的发现与解决
  • 2025 DevOps开源工具全景指南:构建面向未来的智能交付体系
  • 嵌入式软件面试八股文
  • 面试150 数字范围按位与
  • PLLIP核
  • 测试老鸟整理,物流项目系统测试+测试点分析(一)
  • 【笔记】Gibbs自由能全微分公式推导
  • AJAX 原理_第一节_XHR 对象
  • 免安装MySQL启动全解:从解压到远程访问的保姆级教程
  • U盘中毒,文件被隐藏的解决方法
  • Redis6.0+安装教程(Linux)
  • Map系列
  • docker搭建部署 onlyoffice 实现前端集成在线解析文档解决方案
  • 车载诊断架构 ---面向售后的DTC应该怎么样填写?
  • net8.0一键创建支持(Kafka)
  • 基于Prometheus+Grafana的分布式爬虫监控体系:构建企业级可观测性平台
  • 【旧文】Adobe Express使用教程
  • net8.0一键创建辅助开发的个人小工具
  • c++加载qml文件
  • G1回收器
  • 企业IT管理——信息安全策略纲要【模板】
  • TIM 编码器接口
  • listen() 函数详解
  • 表单重复提交、以及重复消费的幂等性问题解决方案
  • 企业如何便捷地使用宝塔面板管理系统服务和网站:一键全能部署与高效运维
  • 062_Arrays类与数组操作
  • 在飞牛OS上部署MoonTV:一站式影视聚合播放器安装教程
  • [spring6: @EnableWebMvc]-源码分析
  • MySQL 事务和锁
  • Webpack 和 Vite 的关键区别