go module 使用教程

chymingyan · · 8759 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

如果你还在使用 GOPATH 模式来开发Golang程序,那么你可以参考本文来告别 GOPATH,并带给你一个方便的包管理工具。

关于 go mod 的说明和简单使用,可以参考:

1、Go1.1.1新功能module的介绍及使用请添加链接描述

2、Introduction to Go Modules请添加链接描述

3、Go 1.11 Modules 官方说明文档请添加链接描述

go Modules—Modules是Go 1.11中新增的实验性功能,是一种新型的包管理工具。
具体操作:
首先要把go升级到1.11

升级后,可以设置通过一个环境变量GO111MODULE来激活modules:

export GO111MODULE=on //此时go会使用modules,而不会去GOPATH目录下查找。

一般默认情况是GO111MODULE=auto,此时go命令行将会根据当前目录来决定是否启用module功能。这种情况下可以分为两种情形:当前目录在GOPATH/src之外且该目录包含go.mod文件,或者当前文件在包含go.mod文件的目录下面。

当GO111MODULE=off时,go命令行将不会支持module功能,寻找依赖包的方式将会沿用旧版本那种通过vendor目录或者GOPATH模式来查找。

当module功能启用时,GOPATH在项目构建过程中不再担当import的角色,但它仍然存储下载的依赖包,具体位置在$GOPATH/pkg/mod。

其次

假设有一个project命名为 helloworld;
1.初始化mod:

go mod init helloworld

初始化后系统会生成一个go.mod文件;然后执行go build,再次查看go.mod文件发现多了一些内容(依赖包列表以及版本),同时生成go.sum文件;go.sum是一个模块版本内容的校验值,用来验证当前缓存的模块。go.sum包含了直接依赖和间接依赖的包的信息,比go.mod要多一些。
2.下载依赖

go mod download

3.常用指令

go mod init        initialize new module in current directory 在当前目录初始化mod

go mod tidy //拉取缺少的模块,移除不用的模块。

go mod download //下载依赖包

go mod vendor //将依赖复制到vendor下

go mod verify //校验依赖

go list -m -json all //依赖详情

go mod graph //打印模块依赖图

go mod why //解释为什么需要依赖

3.有一些包被墙了,拉不到,可以使用如下网址配置golang 的代理:

https://github.com/goproxy/goproxy.cn/blob/master/README.zh-CN.md

4.版本控制

go get 包
会默认下载最新依赖的包,并且会在go.mod里面记录下版本号
如果有tag,则会拉取最的tag包
若要使用某个固定commit的包
require github.com/docker/docker e7b5f7dbe98c(commit)
go.mod会自动更新为相应 pseudo-versions的包版本
官方文档 https://tip.golang.org/doc/go1.13#version-validation

5.备注
在dev模式需要指定 $GOPATH
依赖包会被保存到 $GOPATH/pkg下面

cd $GOPATH
ls
bin pkg src

如果有go相关工具包,会使用src下的工具包

6.问题---beego 无法自动生成文档
beego延续以前 $GOPATH/src目录下找项目生成api文档的方式。
1.项目请建立在 $GOPATH/src
2.关闭go mod export GO111MODULE=off
3.执行 bee generate docs
如提示有任何第三方依赖找不到

package 'github.com/beego/i18n' does not exist in the GOPATH or vendor path

则执行go get github.com/beego/i18n将会将依赖包下载到$GOPATH/src下
执行完生成文档命令提示如下则成功了

2020/02/27 18:44:56 SUCCESS  ▶ 0036 Docs successfully generated!

7.go.mod beego版本会强制更新
beego 版本gomod配置的是1.7.1每次go build 或者bee run 会强制更新为1.12.0
(1)bee run使用了src的版本,由于有该分支是devlop是1.12.0
(2)bee 1.12.0使用了 “github.com/astaxie/beego/context/param”
(3)该包需要1.12.0才能使用

8.使用go version go1.13.8 更新的依赖是私有仓库会如下报错
verifying 410 [地址] gone
解决办法:
export GO111MODULE=on
export GOPROXY=direct
export GOSUMDB=off


有疑问加站长微信联系(非本文作者)

本文来自:51CTO博客

感谢作者:chymingyan

查看原文:go module 使用教程

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

8759 次点击  ∙  1 赞  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传