一文说清GO环境变量-GO111MODULE、GOROOT、GOPATH、GOBIN、GOPRIVATE

本文介绍了Go语言的开发模式变化,从GOPATH模式到go module模式,详细解析了GO111MODULE、GOROOT、GOPATH、GOBIN和GOPRIVATE等环境变量的作用。在go module模式下,即使不需要GOPATH,但其他环境变量仍有其重要性,如GOROOT用于存放Go发行版文件,GOBIN用于存放可执行程序,而GOPRIVATE则用于配置私有仓库的导入路径。

搭建环境:mac OS(linux系统类似)
go version:1.16

Go的开发模式-GO111MODULE

介绍GO环境变量之前,必须先介绍Go开发模式的重大变化。

go有两种开发模式,1.13前的GOPATH开发模式和之后的go module开发模式
go module开发模式不再需要将项目代码存放在$GOPATH/src下,工程代码可以放在任意位置。

第三方库的代码、缓存、sumdb等仍然在$GOPATH下。

从GOPATH开发模式到go module开发模式

go module开发模式取代GOPATH开发模式,是为了在go的整个开发生态中引入包版本概念。如不同工程项目都要使用gin,但是一个使用gin@1.1.1,另一个使用gin@1.5.1。这种区分在GOPATH模式下是无法实现的。

GOPATH模式到go module开发模式是循序渐进的,其中GO111MODULE变量起到区分本地GO开发模式的作用。

Go 1.11 开始,引入GO111MODULE环境变量,默认设置为GO111MODULE=auto。当GO111MODULE=off时,使用GOPATH开发模式;GO111MODULE=on时,使用go module开发模式
Go 1.13开始,删除了项目目录必须在$GOPATH/src的限制。只要项目目录中有go.mod文件,都会使用go module开发模式
Go 1.16开始,默认设置GO111MODULE=on,这也意味着GOPATH模式被默认关闭。如果需要使用GOPATH模式开发,需要显式设置GO111MODULE=auto or off。

需要注意的是,使用go module开发模式,并不意味着不需要GOPATH环境变量。下文将会介绍go module模式下,GOPATH环境变量的作用。

ps:当前趋势是使用go module开发模式,但是仍然有很多坑。比如安装etcd的客户端client,就会遇到一大堆由于go module引起的报错,心累。

Go程序安装路径-GOROOT

go的发行版(go官方标准文件)的位置,如go command本身和go标准库(fmt、encoding等)。

通常是/usr/local/go,不需要额外设置,安装golang时GOROOT会自动设置。

该目录下的bin只有发行版的可执行文件

deMacBook-Pro ~ > ll -h /usr/local/go/bin
total 34256
rwxr-xr-x 1 root wheel 13M 6 4 02:36 go
rwxr-xr-x 1 root wheel 3.3M 6 4 02:36 gofmt

Go工作区-存放第三方包代码GOPATH

除了发行版,其他go程序源码+可执行文件放置的地方。不是自己创建的go程序(工程目录),而是通过go get 下载的第三方包、第三方依赖。
其中可执行文件放在$GOPATH/bin (or $GOBIN, if set)中。第三方包将会下载缓存在 $GOPATH/pkg/mod

所以使用go module模式开发,仍需设置GOPATH

Go可执行程序-引用包路径 GOBIN

$GOBIN = $GOPATH/bin
$GOBIN存放非go发行版的可执行文件,$GOROOT/bin存放发行版的可执行文件,如go命令。

go get go intsall下载的非go发行版可执行文件,如命令行工具fresh ,可执行文件就在GOBIN中。

想要直接使用GOBIN 中的可执行文件,需要将GOBIN 添加到环境变量$PATH 中。

💡 经测试,可以在go env中设置GOBIN或者环境变量 $PATH中添加GOBIN,两者都会生效。

第三方私有包下载路径-GORIVATE

设置私有仓库的导入路径。

如果要用到私有仓库的第三方包,必须要设置GORIVATE ,指定私有仓库域名。

# 多个私有仓库用 , 隔开
go env -w GOPRIVATE="gitlab.xxx.cn,gitlab.xxxx.com"

GO环境变量的设置

以上介绍的环境变量,除GOROOT外,都需要自己添加配置。
有两种方法,推荐第二种go env,简单便捷。

  1. 在各类环境变量文件中编辑,如linux的~/.bashrc ~/.bash_profile,mac OS下的~/.zshrc ~/.zprofile
  2. 命令行go env
# 设置go环境变量
go env -w GOPATH=/your path/to/go
go env -w GOBIN=/you path/to/bin

# 查看全部go环境变量
go env

# 查看指定go环境变量
go env | grep GOPATH 

参考资料

Installing Go from source#gopath

go的两种开发模式中GOPATH 的作用:GOPATH · golang/go Wiki

私有仓库的导入:Go Modules Reference

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值