go安装依赖包(go get, go module)

安装完golang后,输入go env可以看到

GOPATH="/home/zhongzhanhui/go"
GOROOT="/usr/local/go"
GOBIN=""

go get

参考http://c.biancheng.net/view/123.html

go get 命令可以借助代码管理工具通过远程拉取或更新代码包及其依赖包,并自动完成编译和安装。整个过程就像安装一个 App 一样简单。这个命令在内部实际上分成了两步操作:第一步是下载源码包,第二步是执行 go install。

默认情况下,go get 可以直接使用。例如,想获取 go 的源码并编译,使用下面的命令行即可:

go get github.com/davyxu/cellnet

go get下载的依赖包会放到GOPATH 目录下,因此获取前需要确保 GOPATH 已经设置。Go 1.8 版本之后,GOPATH 默认在用户目录的 go 文件夹下。

go module

参考https://www.cnblogs.com/chnmig/p/11806609.html

https://www.jianshu.com/p/bbed916d16ea

https://www.cnblogs.com/klsw/p/11537850.html

这个很详细:goproxy和go modules的初步使用

go module是go官方自带的go依赖管理库。go module可以将某个项目(文件夹)下的所有依赖整理成一个 go.mod 文件,里面写入了依赖的版本等,使用go module之后我们可不需要关心GOPATH,也不用将代码放置在src下了。

  • GO111MODULE=off: 不使用 modules 功能。
  • GO111MODULE=on: 使用 modules 功能,不会去 GOPATH 下面查找依赖包。
  • GO111MODULE=auto: Golang 自己检测是不是使用 modules 功能。

推荐使用 Go 模块时将 GO111MODULE 设置为 on而不是atuo,将以下语句添加进 ~/bashrc中,然后重开Terminal

gedit ~/.bashrc
添加 export GO111MODULE=on

初始化

项目第一次使用 GO MODULE(项目中还没有go.mod文件) ,cd进入项目文件夹,初始化 MODULE

cd /home/zhongzhanhui/GoProject/Seckill   
go mod init Seckill  	#Seckill是项目名

此时项目根目录会出现一个 go.mod 文件,此时的 go.mod 文件只标识了项目名和go的版本,这是正常的,因为只是初始化了。 go.mod 文件内容如下:

module SecKill

go 1.13

检测依赖

go mod tidy

tidy会检测该文件夹目录下所有引入的依赖,写入 go.mod 文件,写入后会发现 go.mod 文件有所变动:

module SecKill

go 1.13

require (
	github.com/gin-contrib/sessions v0.0.1
	github.com/gin-gonic/gin v1.5.0
	github.com/jinzhu/gorm v1.9.11
	github.com/kr/pretty v0.1.0 // indirect
	gopkg.in/yaml.v2 v2.2.2
)

此时依赖还是没有下载的。

下载依赖

我们需要将依赖下载至本地,但不使用 go get,而是使用以下命令

go mod download

然而如果你没有设置 GOPROXY 为国内镜像,这步百分百会卡死。

设置镜像的语句(最好把他们写进 ~/.bashrc 中,不然每次打开Terminal都要执行一次):

export GO111MODULE=on
export GOPROXY=https://goproxy.io

参考https://blog.csdn.net/mrtwenty/article/details/98451005

此时会将依赖全部下载至 GOPATH 下的pkg/mod文件夹中,比如此处会下载到/home/zhongzhanhui/go/pkg/mod中,同时会在项目根目录下生成 go.sum 文件, 该文件是依赖的详细依赖。但是我们开头说了,我们的项目是没有放到 GOPATH 下的,那么我们下载至 GOPATH 下是无用的,照样找不到这些包

似乎项目是可以找到放在GOPATH 下的依赖包的。

导入依赖

go mod vendor

执行此命令,会将刚才下载至 GOPATH 下的依赖转移至该项目根目录下的 vendor(自动新建) 文件夹下,此时我们就可以使用这些依赖了。然而实际不导入也是完全ok的。导入了反而更麻烦。

在协作中使用 GOMODULE时要注意的是, 在项目管理中,如使用git,请将 vendor 文件夹放入白名单,不然项目中带上包体积会很大。

git设置白名单方式为在git托管的项目根目录新建 .gitignore 文件

go安装依赖包(go get, go module)_第1张图片

设置忽略即可。但是 go.mod 和 go.sum 不要忽略,另一人clone项目后在本地进行依赖更新(同上方依赖更新)即可。

GOLAND设置开启 GO MODULE

这部分看goproxy和go modules的初步使用 更详细。

可能是因为 GO MODULE 功能还需完善,GOLAND默认是关闭该功能的,我们需要手动打开。proxy应该填https://goproxy.io

go安装依赖包(go get, go module)_第2张图片

在GoLand的setting中设置好GOPATH,然后在代码的import的依赖包处按 alt+enter ,同步依赖包即可,可以看到依赖包名会由红色变绿色。

依赖更新

这里的更新不是指版本的更新,而是指引入新依赖,不使用 go get ,我怎么在项目中加新包呢?

直接项目中 import 这个包,之后更新依赖即可依赖更新请从检测依赖部分一直执行即可,即

go mod tidy
go mod download
go mod vendor

GOMODULE常用命令

go mod init  # 初始化go.mod
go mod tidy  # 更新依赖文件
go mod download  # 下载依赖文件
go mod vendor  # 将依赖转移至本地的vendor文件
go mod edit  # 手动修改依赖文件
go mod graph  # 打印依赖图
go mod verify  # 校验依赖

你可能感兴趣的:(go安装依赖包(go get, go module))