对于golang新手来说,经常会出现无法编译一个github上的项目,主要原因是http://golang.org域名被墙,导致无法正常下载依赖项,另外go module还有GOPATH等一些概念不熟悉导致的。本人以http://github.com/langhuihui/monibuca为例,画了一个图,帮助初学者快速顺利启动一个项目。
什么是mod模式?
默认情况下GO111MODULE = “”代表mod模式处于自动状态:
即如果当前目录下含有go.mod文件,那么就会自动进入mod模式,否则就是非mod模式。
如果手动设置了GO111MODULE = on 那么就会一直处于mod模式。
如果设置了GO111MODULE = off 那么就关闭了mod模式。
mod模式下,go工程的所有依赖都会被下载到$GOPATH/pkg/mod下面。并且是多版本共存的状态。
例如在windows下执行:
set GO111MODULE=on
go get github.com/langhuihui/monibuca
就会临时开启mod模式并将这个项目下载到
%GOPATH%\pkg\mod\http://github.com\langhuihui\monibuca@v1.2.14
同时该项目所有依赖项也会被下载到pkg
另外一种常规做法:
使用git clone github.com/langhuihui/monibuca 到任意目录下,由于该项目已经包含了go.mod,所以,我们只需要到目录下执行go run main.go即可启动实例。也可以先使用go build编译出exe文件,后再运行exe文件。此时会下载所有依赖项。
mod模式下如何更新依赖项?
在实例目录下,执行go get -u即可更新所有依赖项,更新完毕后需要重新执行go build。
单独更新某个依赖项:
例如更新engine:go get -u github.com/Monibuca/engine/v2
更新到指定版本:go get -u github.com/Monibuca/engine/v2@v2.1.9
更新完成后,会更新当前目录下的go.mod文件。
非mod模式
非mod模式下,所有的依赖库都会下载到GOPATH下的src目录,并且不区分版本。
非mod模式下(当前目录没有go.mod)执行go get http://github.com/langhuihui/monibuca会将这个库下载到
GOPATH/src/http://github.com/langhuihui/monibuca下面。我们可以直接在这个目录进行开发和调试。
也可以直接git clone到这个目录,然后删除go.mod或者GO111MODULE = off关闭mod模式,后执行go get,就会开始下载依赖项到GOPATH/src目录了。
注意:由于http://golang.org域名被墙,导致go get失败,所以需要翻墙。如果无法翻墙,则可以使用mod模式,并配置GOPROXY=goproxy.io,direct 。 注意:GOPROXY只能和mod模式配合使用。
非mod模式下无法翻墙怎么办?
非mod模式下,主要无法下载的是http://golang.org/x/sys、http://golang.org/x/sync、http://golang.org/x/net、http://golang.org/x/crypto
所以可以在开启mod模式下先下载到pkg目录下,然后将这个四个包复制到src目录下,并去掉目录中的版本号。然后就可以正常go get了。
非mod模式下可以方便对源码进行修改和调试,不用担心修改的源码和引用的源码不一致的情况。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有