go mod教程、go module

发布时间:2022-01-21 04:22:57 作者:路人甲 阅读(2408)

什么是go mod

go mod 是go语言的包管理工具,类似java 的maven,go mod的出现可以告别goPath,使用go module来管理项目,有了go mod账号就不需要非得把项目放到gopath/src目录下了,你可以在磁盘的任何位置新建一个项目

go mod在go语言的1.11版本后推出,但是在早期,go mod 非常难用,被广大的开发者所诟病;现在已经好了很多了

常用命令

通过命令go mod help 可以看到有go mod有以下几个命令

  • download :下载module到本地缓存,下载到GOMODCACHE指定的路径
  • edit: 编辑
  • graph :以文本形式打印模块需求图
  • init :创建go mod 项目
  • tidy 添加缺失module,或者去除没有使用的module
  • vendor 将项目的依赖库下载到项目内部,作为项目的一部分来编译。
  • verify 验证依赖是否正确
  • why explain why packages or modules are needed

下载依赖 go get方式

go get命令会下载指定的包,并将下载的包进行编译,然后安装到特定目录。

  1. go get github.com/go-redis/redis

除此之外,go get还提供以下几个参数

  • -d :只下载不安装
  • -f :只有在你包含了 -u 参数的时候才有效,不让 -u 去验证 import 中的每一个都已经获取了,这对于本地 fork 的包特别有用
  • -t :同时也下载需要为运行测试所需要的包
  • -u :强制使用网络去更新包和它的依赖包
  • -v :显示执行的命令

下载依赖 go.mod方式

在mod文件中添加 require(依赖链接 版本号) 即可,示例:

  1. module demo_94_tail
  2. go 1.17
  3. require (
  4. github.com/hpcloud/tail v1.0.0 // indirect
  5. )

添加完成后在执行以下命令即可将依赖下载到本地

  1. go mod download

查看go mod状态

  1. go env

找到以下的配置项就是go mod的配置,为什么叫 GO111MODULE 呢,中间的111是因为从1.11版本后推出的功能,

  1. set GO111MODULE=on

设置代理

默认的代理是GOPROXY=https://proxy.golang.org,direct,但是这个链接是国外的网站,得翻墙才能用,所以我们用国内的代理

  1. go env -w GOPROXY=https://goproxy.cn,direct

开启/关闭go mod

GO111MODULE 有三种状态

  • on : 开启
  • off : 关闭
  • auto :默认值,go命令会根据当前目录来决定是否启用module功能

开启 go mod

  1. go env -w GO111MODULE=on

关闭 go mod

  1. go env -w GO111MODULE=off

download 下载

下载module到本地缓存,下载到GOMODCACHE指定的路径,可通过go env -w GOMODCACHE=/xxx/xxx修改cache路径

  1. go mod download

edit 编辑go.mod文件

  1. # -replace 表示 包下载不下来的时候使用,--replace=新地址=下载不下来的地址
  2. go mod edit -replace golang.org/x/crypto@v0.0.0=github.com/golang/crypto@latest
  3. # -exclude 表示排除某个包
  4. go mod edit -exclude golang.org/x/crypto@v0.0.0
  5. # -require 表示导入某个包
  6. go mod edit -require golang.org/x/crypto@v0.0.0
  7. # -json 以json方式打印go.mod 模块对象
  8. go mod edit -json

graph

以文本形式打印模块需求图

  1. go mod graph

init 创建go mod 项目

进入项目目录下,执行以下命令,其中projectName 是你的项目名称, 建议和目录一致

  1. go mod init projectName

执行完后会自动创建一个go.mod的文件,内容如下

  1. module xx.xx.com/xd/projectName
  2. go 1.14

tidy

添加缺失module,或者去除没有使用的module

  1. go mod tidy

vendor

将项目的依赖库下载到项目内部,作为项目的一部分来编译。此时会生产一个vendor的目录,一般情况下都用不上

  1. go mod vendor

verify

验证依赖是否正确

  1. go mod verify

why

查找依赖

  1. go mod why

打包编译

go build 编译

go build命令会编译包及其依赖,生成的文件存放在当前目录下。而且go build只对main包有效,其他包不起作用

  1. go build

go install 编译并安装

和go build命令比较相似,go install对于非main包会生成静态文件放在$GOPATH/pkg目录下,文件扩展名为a。如果为main包,则会在$GOPATH/bin下生成一个和给定包名相同的可执行二进制文件。

  1. go install
go build 、go install、go get 区别
  • go build: go build命令是在当前目录编译生成可执行文件,注意 go build 指令会调用所有引用包的源码进行重新编译而不是使用之前pkg里的文件
  • go install: 执行 go install 命令会完成类似 go build 的功能 ,但go install 命令执行生成的可执行文件是在【$GOPATH/bin】目录中
  • go get: 该命令可以理解为两个操作 git clone + go install , 执行会将远程代码clone 到【$GOPATH/src】 目录中

关键字Go