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

[go v01 ]

# adward @ adwarddeMacBook-Pro in ~  [10:41]  
$ go env GOPATH
/Users/adward/developer/machines/golang/gopath1.25.4
(base) 
# adward @ adwarddeMacBook-Pro in ~  [10:41]  
$ go env GOMODCACHE
/Users/adward/developer/machines/golang/gopath1.25.4/pkg/mod
(base) 
# adward @ adwarddeMacBook-Pro in ~  [10:41]  
$ go env GO_HOME   (base) 
# adward @ adwarddeMacBook-Pro in ~  [10:41]  
$ go env GOROOT 
/Users/adward/developer/machines/golang/go1.25.4
(base) 
# adward @ adwarddeMacBook-Pro in ~  [10:41]  
$ 

Go 环境变量入门笔记:GOROOT、GOPATH、GOPROXY 到底是干什么的?

之前学习 Go 的时候配置过一些环境变量,比如:

export GO_HOME="/Users/adward/developer/machines/golang/go1.25.4"
export GOPATH="/Users/adward/developer/machines/golang/gopath1.25.4"
export GOPROXY="https://goproxy.cn"

时间久了容易忘,这里简单整理一下。


1. GOROOT / GO_HOME:Go 本体在哪里

严格来说,Go 官方常用的是:

GOROOT

它表示:

Go 语言本体的安装目录

里面一般有:

bin/go
pkg/
src/

也就是说,GOROOT 里面放的是 Go 编译器、标准库、Go 自带工具等内容。

有些人习惯自己写一个:

export GO_HOME="/Users/adward/developer/machines/golang/go1.25.4"

这个 GO_HOME 不是 Go 官方核心变量,只是自己定义的一个别名。

通常会配合:

export PATH="$GO_HOME/bin:$PATH"

让终端能找到 go 命令。

简单理解:

GOROOT / GO_HOME = Go 本体安装在哪里

2. GOPATH:Go 的用户工作区

GOPATH 不是 Go 的安装目录。

它更像是 Go 给用户侧内容准备的工作区。

常见结构:

$GOPATH/bin
$GOPATH/pkg
$GOPATH/pkg/mod

现在最常见的用途有两个。


第一:保存 go install 安装出来的命令行工具

比如执行:

go install github.com/air-verse/air@latest

安装出来的 air 命令通常会放到:

$GOPATH/bin

所以通常需要配置:

export PATH="$GOPATH/bin:$PATH"

这样才能直接在终端执行:

air

第二:保存 Go 下载的第三方依赖缓存

现在 Go 项目主要使用 Go Modules,也就是项目里会有:

go.mod
go.sum

当项目需要第三方依赖时,Go 会把依赖源码下载到 module 缓存里,通常是:

$GOPATH/pkg/mod

例如:

$GOPATH/pkg/mod/github.com/gin-gonic/gin@v1.10.0

所以,项目越多,下载过的依赖越多,$GOPATH/pkg/mod 可能会越来越大。

这是正常的,因为 Go 是让多个项目共享同一个依赖缓存,避免每个项目都重复下载一份。


3. 现在还需要把项目放到 GOPATH/src 下面吗?

一般不需要。

早期 Go 项目通常要放在:

$GOPATH/src/xxx

但现在 Go Modules 已经是主流。

现在写项目通常是:

mkdir my-go-project
cd my-go-project
go mod init my-go-project

只要项目里有 go.mod,项目就可以放在任意目录,比如:

~/projects/my-go-app
~/Desktop/test-go
~/developer/workspace/demo

所以:

GOPATH 不是每个项目都设置一次

一般一台电脑设置一个 GOPATH 就够了。


4. go.mod 和 go.sum 是什么?

go.mod 可以理解成项目的依赖清单。

例如:

module my-appgo 1.25require github.com/gin-gonic/gin v1.10.0

它表示:

当前项目叫 my-app
使用 Go 1.25
依赖 github.com/gin-gonic/gin v1.10.0

go.sum 则主要记录依赖的校验信息,用来确认下载下来的依赖没有被篡改。

可以简单理解为:

go.mod = 依赖清单
go.sum = 依赖校验表

类比其他语言:

Go      -> go.mod / go.sum
Node.js -> package.json / package-lock.json
Python  -> requirements.txt / pyproject.toml / poetry.lock
Java    -> pom.xml / build.gradle

5. go get 和 go mod tidy 做了什么?

当执行:

go get github.com/gin-gonic/gin

或者:

go mod tidy

Go 大概会做这些事:

1. 分析当前项目需要哪些依赖
2. 修改 go.mod
3. 修改 go.sum
4. 下载依赖源码到 $GOPATH/pkg/mod
5. 后续编译时从缓存中读取这些源码

注意:

依赖源码通常不会复制到当前项目目录里

当前项目主要只是记录依赖信息。

真实源码通常在:

$GOPATH/pkg/mod

6. go install 和 go get 的区别

这个很容易混。

go get / go mod tidy

主要用于当前项目的依赖管理。

比如项目代码里用了:

import "github.com/gin-gonic/gin"

这时候通常使用:

go get github.com/gin-gonic/gin

或者:

go mod tidy

它们会更新当前项目的 go.modgo.sum


go install

主要用于安装命令行工具。

比如:

go install github.com/air-verse/air@latest

它会把可执行文件安装到:

$GOPATH/bin

如果设置了 GOBIN,则会安装到 GOBIN 指定的位置。

简单记:

项目要 import 的库:go get / go mod tidy
终端要直接运行的工具:go install

7. GOPROXY:Go 下载依赖的代理

GOPROXY 表示 Go 下载第三方依赖时走哪个代理。

比如:

export GOPROXY=" https://goproxy.cn ,direct"

含义是:

优先从 goproxy.cn 下载依赖
如果代理下载不到,就 direct 直接访问原始地址

在国内环境下,配置 GOPROXY 可以明显减少依赖下载失败的问题。


8. 推荐的基础配置

如果是自己手动管理 Go 安装目录,可以这样配置:

export GO_HOME="/Users/adward/developer/machines/golang/go1.25.4"
export GOROOT="$GO_HOME"export GOPATH="/Users/adward/developer/machines/golang/gopath1.25.4"
export GOPROXY=" https://goproxy.cn ,direct"export PATH="$GOROOT/bin:$GOPATH/bin:$PATH"

含义分别是:

GO_HOME / GOROOT:Go 本体安装目录
GOPATH:Go 用户工作区
GOPROXY:Go 下载依赖使用的代理
PATH:让系统能找到 go 命令和 go install 安装的工具

9. 如果 GOPATH 太大怎么办?

因为依赖缓存都在:

$GOPATH/pkg/mod

所以用久了可能会变大。

可以查看当前配置:

go env GOPATH
go env GOMODCACHE

清理 module 缓存:

go clean -modcache

清理后,如果项目再次需要这些依赖,Go 会重新下载。


最后总结

可以用这一句话记住:

GOROOT / GO_HOME:Go 本体在哪里
GOPATH:Go 的用户工作区,放工具和依赖缓存
GOPROXY:Go 下载依赖走哪个代理
go.mod:当前项目需要哪些依赖
go.sum:依赖校验信息

再压缩一点:

go.mod 负责记录“这个项目要什么”
$GOPATH/pkg/mod 负责保存“真实下载下来的依赖”
$GOPATH/bin 负责保存“go install 安装出来的工具”

现在写 Go 项目,重点看项目里有没有 go.mod,而不是看它是不是放在 $GOPATH/src 下面。

http://www.jsqmd.com/news/1047988/

相关文章:

  • 2026 年 6 月重庆奢侈品黄金回收门店盘点报告:耀辉领衔靠谱机构全维度解析 - 奢侈品回收
  • 2026福州闲置黄金变现实测,五家连锁回收机构综合实力排名 - 讯息早知道
  • 3步实现自然语言查询SQL数据库:LangChain4j的AI数据库交互终极指南
  • MC68HC908JL16 FLASH模拟EEPROM:监控模块EE_WRITE/EE_READ原理与工程实践
  • 2026年欧米茄官方维修门店新地址正式启用,全新售后热线同步升级公示 - 欧米茄中国服务中心
  • 黄金铂金白银回收门店整理,各区均有分店联系方式 - 千叶啊
  • 2026南宁钻石回收避坑指南!5大正规机构实测,闲置钻石高价变现攻略 - 讯息早知道
  • 基于RPA与Python的CRI-O容器运行时自动化测试实践
  • 在 Mac 上找回纯粹写作体验:freewrite 开源项目深度解析
  • 如何快速备份QQ空间历史数据:GetQzonehistory完整指南与实用技巧
  • 微信投票制作方法,2026云众评选投票小程序制作教程 - 微信投票小程序
  • 数学专业值得考的7个证书(2026版)
  • 2026兰州本地正规瓷砖空鼓维修服务商盘点|无损免拆砖修复,全域上门售后有保障 - 宅安选房屋修缮
  • 无锡市今日黄金回收价格多少?本地5家口碑门店报价参考 - 三大殿
  • Hoogle完全指南:从安装到高级搜索,解锁Haskell库的隐藏潜力
  • 2026安徽省淮北市学历断层如何补救?电大中专便捷报考最新发布 - cc江江
  • 五指山市闲置黄金变现多少钱?本地5家回收门店最新报价参考 - 三大殿
  • 2026 昆山黄金回收攻略,全城上门估价透明变现当场打款 - 速递信息
  • 2026三亚目的地婚礼排名,口碑前十盘点 - charlieruizvin
  • Hoogle本地部署指南:离线环境下搭建属于自己的Haskell搜索服务
  • Azure Data Studio:微软跨平台数据库管理工具的完整使用指南
  • FPGA实战:基于Verilog的直流电机PWM调速系统设计与Quartus II实现
  • 吉安市闲置黄金变现多少钱?本地5家回收门店最新报价参考 - 千叶啊
  • 栈与队列精讲|银行业务队列简单模拟
  • QMCDecode终极指南:3分钟解锁QQ音乐加密音频,Mac用户的格式自由方案
  • 2026年郑州学员咨询众智商学院PMP课程怎么核对官方入口? - 众智商学院官方
  • 2025-2026年国际艺术高中推荐:TOP5专业评测作品集指导与升学支持案例特点价格 - 品牌推荐
  • 锦州市2026年黄金回收报价,内行人整理实体门店回收清单 - 千叶啊
  • 2026安徽省阜阳市电大中专解决学历断层报考指南最新发布 - cc江江
  • ComfyUI-VideoHelperSuite终极指南:三步解决AI视频处理难题