
Go 不支持直接指定 go get 将代码下载到多个 GOPATH 中的某一个,其默认行为始终写入第一个路径;若需精确控制目标位置,应临时设置单一 GOPATH 环境变量后再执行 go get。
go 不支持直接指定 `go get` 将代码下载到多个 gopath 中的某一个,其默认行为始终写入第一个路径;若需精确控制目标位置,应临时设置单一 gopath 环境变量后再执行 `go get`。
在 Go 1.11 之前(尤其是 GOPATH 模式下),go get 命令会将源码克隆至 $GOPATH/src/
因此,若希望将 github.com/gin-gonic/gin 显式安装到 HomeWork 目录下,正确做法是临时覆盖 GOPATH 为单一路径:
# 临时将 GOPATH 设为 HomeWork(仅本次命令生效) GOPATH="$HOME/HomeWork" go get -d github.com/gin-gonic/gin
其中 -d 参数表示“仅下载不构建”,避免因依赖缺失或环境差异导致失败;若需同时构建和安装(如生成 .a 文件或可执行工具),可省略 -d:
GOPATH="$HOME/HomeWork" go get github.com/gin-gonic/gin
执行后,源码将位于:
CNB 云原生构建平台的 Git 操作技能,支持代码克隆、提交、推送、分支管理、Merge Request 管理、流水线触发与结果读取。初次使用需收集用户的 Git 用户名和邮箱。
$HOME/HomeWork/src/github.com/gin-gonic/gin
编译产物(如静态库)则存于:
$HOME/HomeWork/pkg/linux_amd64/github.com/gin-gonic/gin.a # 示例平台路径
⚠️ 注意事项:
- 不要尝试手动移动 src/ 下的仓库目录——Go 工具链不会识别非 GOPATH 首路径中的包,且 go build 或 go install 可能报 cannot find package 错误;
- 多 GOPATH 并非推荐实践。官方 Wiki 明确指出:“即使 GOPATH 支持多路径,也应统一使用单个 GOPATH”(Go Wiki: GOPATH),因其简化依赖解析、避免版本冲突与工具链兼容性问题;
- 若你实际需要隔离工作区(如公司项目 vs 个人学习),更现代、推荐的方式是启用 Go Modules(Go 1.11+ 默认支持):无需 GOPATH,直接在项目根目录 go mod init example.com/myapp,再 go get github.com/gin-gonic/gin 即可——模块依赖统一记录在 go.mod 中,完全脱离 GOPATH 约束。
总结:精准控制 go get 目标路径的唯一可靠方式,是临时设置单一 GOPATH 环境变量;但长远来看,迁移到模块化工作流(go mod)才是符合 Go 生态演进方向的最佳实践。










