Silentdoer

导航

Golang module配置和命令零碎总结

1.首先就是要配置GOPROXY,编辑/etc/environment文件,加上export GOPROXY=https://mirrors.aliyun.com/goproxy/和export GO111MODULE="on"

2.记得source /etc/environment,则在此控制台执行go env会发现这两个参数变了(但是在其他控制台又不会,需要再次执行source /etc/environment;或者可以重启一下)

3.在go.mod文件里通过require来添加依赖包(目前是通过git的形式添加依赖,latest会找最新的release的tag,如果没有则用最新的commit)

分别有三种require方式:

require (
    github.com/casbin/casbin/v2 v2.0.2
    github.com/fastly/go-utils d95a45783239
    github.com/gin-gonic/gin latest
)

第一种则是用特定的版本,第二种是某次提交的版本,第三种则是由go module去找最新的release tag版本,如果没有则用最新的commit版本;

在导入包的时候则不需要指定版本,因为在go.mod里已经指定了(go.mod其实类似pom.xml)

可以通过go build【还有个go install它可以针对库或应用,但是生成的文件在$GOPATH下】来实现只import了但是没有在go.mod里配置require的依赖的下载,将最新的release的tag版本下载下来(如果没有release则是最新的commit),然后go会自动修改该项目的go.mod的require配置增加该依赖的配置;

同理,如果只是在require里配置了,也可以通过go build实现对require依赖的下载;

还可以直接通过go get -u github.com/gin-gonic/gin来实现下载最新的依赖(也是放在$GOPATH/pkg/mod里,因为开启了mod模式),有时候这个还是很有用的,因为用了代理后有时候下载不了最新的版本,这个时候用go get -u也许就能下载最新版本;

-u 就是update的意思。

4.go mod的命令
download     download modules to local cache(下载依赖包)
edit     edit go.mod from tools or scripts(编辑go.mod
graph     print module requirement graph (打印模块依赖图)
init     initialize new module in current directory(在当前目录初始化mod)
tidy     add missing and remove unused modules(拉取缺少的模块,移除不用的模块)
vendor     make vendored copy of dependencies(将依赖复制到vendor下)
verify     verify dependencies have expected content (验证依赖是否正确)
why     explain why packages or modules are needed(解释为什么需要依赖)

5.go mod init要求填写mod的前缀,但实际上是不需要的,比如go mod init silentdoer.me/demo-01,但是其实在go.mod里module demo-01也是可以的而不是必须module silentdoer.me/demo-01(不过最好还是加上“groupId”吧)

可以在require 所有需要的第三方库后,在项目根目录下执行go mod vendor来将第三方库复制到项目根目录的vendor目录里(类似js的node_modules目录),注意,这里go mod vendor似乎没软用,如果需要离线使用第三方库,需要将GOPATH里的内容打包到离线环境,vendor目录没几把毛用(到了离线环境解压GOPATH目录的内容,然后配置GOPATH环境变量,然后用go env看是否成功);

posted on 2020-04-24 17:38  Silentdoer  阅读(904)  评论(0编辑  收藏  举报