GOLANG 环境几个重要的env配置参数解析GOPATH/GOPROXY

 

GOPATH

表示go的工作目录,这个目录指定了需要从哪个地方寻找GO的包、可执行程序等,这个目录可以是多个目录表示,

go编译或者运行时会从这个环境变量中去对应查找,可能还不够清晰,工作目录或者如官方文档中说的workspace

可以这么理解为GO源码目录,在这个目录进行编译、链接最后生成所需要的库、可执行文件

 

GOROOT

表示的是go语言编译、工具、标准库等的安装路径。

Linux下设置GOROOT目录:

export GOROOT=$HOME/go

 

GOPROXY,简单来说就是一个代理,让我们更方便的下载哪些由于墙的原因而导致无法下载的第三方包,

比如golang.org/x/下的包,虽然也有各种方法解决,但是,如果是你在拉取第三方包的时候,而这个包又依赖于golang.org/x/下的包,

你本地又恰恰没有,当然不嫌麻烦的话,也可以先拉取golang.org/x/下的包,再拉取第三方包。

官网是这么说的 A Global Proxy for Go Modules go包的全球代理。

proxy.golang.org 在中国无法访问,故而建议使用 goproxy.cn 作为替代。

 

我个人配置

 

 

 

其实值列表中的direct” 为特殊指示符,

用于指示 Go 回源到模块版本的源地址去抓取 (比如 GitHub ),当值列表中上一个 Go module proxy 返回 404 410 错误时,Go 自动尝试列表中的下一个,

遇见direct” 时回源,遇见 EOF 时终止并抛出类似 “invalid version: unknown revision...” 的错误。

 

GO111MODULE

export GO111MODULE=on # 开启GoModule特性

  

或者在环境信息文件/etc/profile的最后面添加上一行

export GO111MODULE=on

 

GO111MODULE解释, 当为on时则使用Go Modules,go 会忽略 $GOPATHvendor文件夹,只根据go.mod下载依赖。

当为 off时则不适用新特性 Go Modules支持,它会查找 vendor目录和 $GOPATH来查找依赖关系,也就是继续使用“GOPATH模式”。

当为 auto时或未设置时则根据当前项目目录下是否存在 go.mod文件或 $GOPATH/src之外并且其本身包含go.mod文件时才会使用新特性 Go Modules模式,

并且autoGO111MODULE的默认值。

 

go modules

golang官方建议是一个项目一个GOPATH,但是鉴于很多人都不这么做(我也不这么做,因为麻烦),

于是在go1.11的时候推出了这个go modules来解决依赖管理的问题。

使用:

生成 go.mod 文件

go mod init

 

加载 pakage GOPATH\pkg\mod

go mod tidy

  

 

配合go get使用(版本筛选):

go get 自动下载package包到 GOPATH\pkg\mod 目录下,并更新go.mod文件

go get package[@version]来安装指定版本的package,默认go get package@latest

version可以是vx.y.z这种形式或者直接使用commitchecksum,也可以是master或者latest

versionmaster时,不管package有没有打tag,都会选择master分支的最新commit

可以在version前使用>>=<<=,表示选取的版本不得超过/低于version,在这个范围内的符合latest条件的版本

当想要修改package的版本时,只需要go get package@指定的version即可

 

GOPRIVATE

go get通过代理服务拉取私有仓库(企业内部module或托管站点上的private库),而代理服务不可能访问到私有仓库,会出现了404错误

go1.13版本提供了一个方便的解决方案:GOPRIVATE环境变量。

export GOPRIVATE=gitlab.com/xxx

私有库访问可以通过命令git config ...的方式来配置

已经配置了ssh key,将https访问转换为 ssh 访问:

[url "git@github.com:"]

    insteadOf = https://github.com/

[url "git@gitlab.com:"]

    insteadOf = https://gitlab.com/

 

 

GONOPROXY GONOSUMDB

GONOPROXYGONOSUMDB均为none,意味着所有module,不管是公共的还是私有的,

都要经过proxy下载,经过sumdb验证

GONOPROXY="*.xxx,com"

GONOSUMDB="*.xxx,com"

*.xxx,com》网站不走代理拉取第三方包

posted @ 2020-08-18 11:22  pgman  阅读(7711)  评论(0编辑  收藏  举报