查看当前环境变量配置情况 go env
查看指定key配置的值 go env <key> 例如:go env GOPROXY
查看多个指定key的配置值 go env <key> <key> <key>
修改指定key环境变量 go env -w <key>=xxx
常见问题以及解决方案:
问题:warning: go env -w xxx=... does not override conflicting OS environment variable
方案:Shell 全局环境变量 > go env -w 持久配置 > Go 默认值 ,以mac为例, ~/.zshrc 或者 ~/.bash_profile 等类似环境配置里面有和go env里面一样的配置,直接修改里面的值就可以了
一、模块/依赖管理类
1. GO111MODULE
含义:Go模块模式总开关,控制是否启用go mod依赖管理
作用:Go1.11+新增,区分传统GOPATH模式 / 现代Module模式
可选值:
off:禁用mod,仅使用GOPATH模式,读取$GOPATH/src源码
on:强制启用go mod,项目必须存在go.mod,无视GOPATH
auto(默认):当前目录/上级存在go.mod则启用mod,否则切回GOPATH
默认值:'' 等价 auto
2. GOMODCACHE
含义:go mod 依赖包本地缓存目录
作用:下载的第三方模块全部缓存此处,避免重复拉取
可选值:任意本地绝对路径
场景:多Go版本共用缓存、磁盘空间不足迁移缓存目录
3. GOMOD
含义:当前编译项目的go.mod文件路径
作用:Go自动识别赋值,只读环境变量,不可手动设置
4. GOWORK
含义:go workspace 多模块工作区配置文件路径(go.work)
作用:本地多微服务并行开发,一键关联多个本地module
可选值:空(不启用workspace)/ 本地go.work文件绝对路径
5. GOPATH
含义:Go传统工作区根目录(GOPATH模式遗留)
目录结构:
$GOPATH/src:源码
$GOPATH/pkg:编译缓存、mod缓存
$GOPATH/bin:编译输出二进制
可选值:任意本地目录,支持多路径用:分隔(Mac/Linux)
6. GOPROXY
含义:Go模块代理下载地址
作用:国内无法直连golang.org,通过代理加速拉取依赖
格式:多代理逗号分隔,direct代表失败后直连源站
常用可选值:
https://goproxy.cn,direct(七牛国内代理,你当前配置)
https://goproxy.io,direct
https://mirrors.aliyun.com/goproxy/,direct(阿里云)
off:关闭代理,强制直连
7. GONOPROXY
含义:不走GOPROXY的私有仓库域名白名单
作用:公司私有Git/内网模块,跳过代理直接内网拉取
示例值:*.corp.com,gitlab.asiainfo.com
8. GOSUMDB
含义:模块哈希校验数据库,校验依赖包完整性、防篡改
作用:下载依赖后校验哈希,防止第三方包被投毒
可选值:
sum.golang.org(官方校验库,默认)
sum.golang.google.cn (官方中国镜像,数据与全球主库同步且可信)
off:关闭哈希校验(内网私有包调试用,生产不推荐)
9. GONOSUMDB
含义:跳过GOSUMDB校验的域名列表
作用:内网私有模块无公开sum记录,配置后不校验
示例:*.asiainfo.chain,gitlab.internal
10. GOPRIVATE
含义:私有模块域名,等价同时配置 GONOPROXY + GONOSUMDB
示例:gitlab.asiainfo.com,*.local
二、编译目标平台(交叉编译核心)
1. GOOS
含义:目标操作系统
作用:交叉编译指定程序运行系统
常用可选值:darwin(Mac)、linux、windows、freebsd
2. GOARCH
含义:目标CPU架构
作用:交叉编译指定芯片架构
常用值:arm64(M1/M2/M5 Mac、ARM服务器)、amd64(x86服务器)、386、arm
3. GOHOSTOS / GOHOSTARCH
含义:本机宿主机系统与架构,只读、不可手动设置
三、编译缓存、输出路径
1. GOCACHE
含义:Go编译中间产物缓存目录
作用:加速重复编译,缓存obj文件,减少重复编译耗时
可选:任意本地路径,可清理缓存:go clean -cache
2. GOBIN
含义:go install 编译输出二进制存放目录
作用:不设置时默认 $GOPATH/bin;设置后统一输出到该目录
可选:空 / 自定义绝对路径
3. GOTMPDIR
含义:Go编译临时文件目录
默认:系统临时目录,极少手动修改
四、Go工具链、安装根目录
1. GOROOT
含义:Go SDK安装根目录
作用:定位标准库、编译工具链、内置包
例如配置:/Users/robinli/workspace/go/go1.21.13
切换多Go版本时修改此变量
2. GOTOOLDIR
含义:Go编译工具链目录(compile/link/asm等工具)
只读,由GOROOT自动推导,无需手动配置
3. GOVERSION
含义:当前Go SDK版本,只读,不可设置
4. GOTOOLCHAIN
含义:Go工具链版本自动管理策略(Go1.21+新增)
可选值:
auto:自动下载匹配go.mod要求的工具链(你当前)
local:仅使用本地GOROOT的SDK,不自动下载新版工具链
五、CGO 跨C语言编译系列(重点,你的CGO_ENABLED=1)
1. CGO_ENABLED
含义:是否启用CGO(Go调用C代码能力)
可选值:1开启 / 0关闭
开启后会调用clang/gcc编译C代码;关闭后纯静态Go编译,交叉编译无依赖
2. CC / CXX / GCCGO / AR / PKG_CONFIG
CC:C编译器,Mac默认clang,Linux一般gcc
CXX:C++编译器,clang++
GCCGO:gccgo编译器(备用Go编译器,极少使用)
AR:静态库打包工具
PKG_CONFIG:C库依赖检索工具 全部自动识别,仅特殊交叉编译场景手动覆盖
3. CGO_CFLAGS / CGO_CPPFLAGS / CGO_CXXFLAGS / CGO_FFLAGS / CGO_LDFLAGS
含义:传递给C/C++编译器的编译、链接参数
你当前统一带 -O2 -g:O2优化等级、g生成调试符号
使用场景:引入第三方C库(如IPFS、加密库、区块链底层)时添加头文件/库路径
4. GOGCCFLAGS
含义:Go传递给C编译器的内置全局参数,自动生成,只读,无需手动配置
六、调试、实验、安全控制
1. GOEXPERIMENT
含义:开启Go实验性语法/特性
示例:cgocheck、rangefunc等,稳定版本开发基本不用,空为关闭所有实验特性
2. GOFLAGS
含义:全局默认go命令参数,所有go build/go run自动携带
示例值:-mod=mod -trimpath,全局统一编译参数
3. GOINSECURE
含义:允许HTTP非加密协议拉取模块,域名白名单
示例:gitlab.local,192.168.1.0/24,内网私服无HTTPS时配置
4. GOVCS
含义:管控go拉取代码使用的版本工具(git/svn/hg)
限制陌生域名使用不安全版本工具,企业内网可放行私有git仓库
七、环境持久化配置文件
GOENV
含义:Go全局环境变量持久化文件路径
作用:go env -w GOPROXY=xxx 写入该文件永久生效
你的路径:/Users/robinli/Library/Application Support/go/env
操作:
写入持久:go env -w 变量名=值
清空配置:go env -u 变量名