当前位置: 首页 > 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.lryc.cn/news/601584.html

相关文章:

  • MMAP 机制通俗易懂
  • 如何在 Ubuntu 24.04 或 22.04 中更改 SSH 端口
  • Qt C++动态库SDK在Visual Studio 2022使用(C++/C#版本)
  • 图像处理:第二篇 —— 选择镜头的基础知识及对图像处理的影响
  • sealos 方式安装k8s5节点集群
  • K8S 九 安全认证 TLS
  • 记录几个SystemVerilog的语法——时钟块和进程通信
  • 系统集成项目管理工程师【第九章 项目管理概论】 - 价值交付系统
  • C51:使用超声波测量距离
  • [10月考试] C
  • 零基础学习性能测试第五章:求最佳线程数
  • 抖音与B站爬虫实战,获取核心数据
  • Kotlin位运算
  • rust-模块树中引用项的路径
  • Python调用大模型api并部署到前端的主流技术栈以及具体框架对比
  • SecureCRT连接密钥交换失败
  • 问津集 #2:High Compression and Fast Search on Semi-Structured Logs
  • CPA全国青少年编程能力等级测评试卷及答案 Python编程(二级)
  • 第六章 JavaScript 互操(3)JS调用.NET
  • 攻击者可能会试图从bd.tao234窃取您的信息
  • 2024-2025华为ICT大赛中国区 实践赛网络赛道(高教组)全国总决赛 理论部分真题+解析
  • Sklearn 机器学习 数值指标 混淆矩阵confusion matrix
  • RS485转Profinet网关与JRT激光测距传感器在S7-1200 PLC系统中的技术解析与应用
  • 29.【.NET8 实战--孢子记账--从单体到微服务--转向微服务】--单体转微服务--用户配置服务
  • GitHub 趋势日报 (2025年07月25日)
  • 9.SpringBoot Web请求参数绑定方法
  • 设计模式(九)结构型:组合模式详解
  • 设计模式(四)创建型:生成器模式详解
  • 第四科学范式(数据密集型科学):科学发现的新范式
  • NLP学习开始01-线性回归