GOLANG 环境几个重要的env配置参数解析 GOPATH/GOPROXY
发布日期:2022-02-21 17:40:32 浏览次数:23 分类:技术文章

本文共 2135 字,大约阅读时间需要 7 分钟。

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 会忽略 $GOPATH和 vendor文件夹,只根据go.mod下载依赖。
当为 off时则不适用新特性 Go Modules支持,它会查找 vendor目录和 $GOPATH来查找依赖关系,也就是继续使用“GOPATH模式”。
当为 auto时或未设置时则根据当前项目目录下是否存在 go.mod文件或 $GOPATH/src之外并且其本身包含go.mod文件时才会使用新特性 Go Modules模式,
并且auto为 GO111MODULE的默认值。

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这种形式或者直接使用commit的checksum,也可以是master或者latest
当version是master时,不管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 ...的方式来配置
我个人是直接使用 https 即可强制go get针对github.com与gitlab.com使用ssh而非https。

[url "git@github.com:"]  insteadOf = https://github.com/[url "git@gitlab.com:"] insteadOf = https://gitlab.com/

    
GONOPROXY 和 GONOSUMDB
GONOPROXY和GONOSUMDB均为none,意味着所有module,不管是公共的还是私有的,
都要经过proxy下载,经过sumdb验证
GONOPROXY="《*.xxx,com》"
GONOSUMDB="《*.xxx,com》"
《*.xxx,com》网站不走代理拉取第三方包
 

转载地址:https://blog.csdn.net/weixin_40599594/article/details/107340752 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:c++中拷贝构造-----深拷贝和浅拷贝
下一篇:golang爬虫 Linux + chromedriver + chrome

发表评论

最新留言

做的很好,不错不错
[***.243.131.199]2024年04月05日 07时05分59秒