Golang官方的包管理工具:go module

发布于 2019-07-27 14:57:10 阅读 261

go module 推出的原因

废话,当然是解决开发中的痛点了。。。

据我所知,php的包管理工具是composernodenpmjavamaven,而经过10年的发展,在去年go推出go 1.11版本的时候,内置了包管理工具go module,不过这个是默认关闭的。

在go module之前我们使用的是gopath去管理第三方的包。每次去获取一个第三方库的时候,需要使用go get将第三方库下载到gopath目录下。那多个项目使用这种方法还好,但是多个项目使用这个第三方库的不同版本,那你可能就要悲剧了。当然在go module出来之前,已经有人做了类似的工具,比如glide。因为我司的go开发者就是使用这个包管理工具,然后有一次看了看我司的代码,发现他们用的这个软件。

go module教程

首先,先确保当前的go的版本大于等于1.11版本。

go version 
#go version go1.12 darwin/amd64

然后打开项目,首先打开go module的开关,默认是不打开的哦

 export GO111MODULE=on

因为国内城墙原因,某些包可能拉不到(golang.org的包),所以设置下代理

export GOPROXY=https://goproxy.io

因为网上说这个代理比较好使,阿里云也有一个代理,http://mirrors.aliyun.com/goproxy/,上面不好使可以试试阿里云的。然后执行

go mod init <项目名称>
#我执行了下面的命令
go mod init github.com/zmisgod/zmisgod.com

此时项目根目录就会多出一个go.mod文件,也就是模块文件。

里面内容是这样的

module github.com/zmisgod/zmisgod.com(这个就是上面的【项目名称】 )

go 1.12

此时执行go run build后,go module就会把文件下载到pkg下面的mod目录下。

此时go.mod的文件变成了

module github.com/zmisgod/zmisgod.com

go 1.12

require (
    github.com/PuerkitoBio/goquery v1.5.0
)

上面的require指的是需要github.com/PuerkitoBio/goquery版本为v1.5.0的。

但是假如你想同时使用github.com/PuerkitoBio/goquery版本为v0.4.0的呢?

只要在使用的时候

import (
"github.com/PuerkitoBio/goquery"
goqueryV03 "github.com/PuerkitoBio/goquery/0.3.0"
)

然后在运行go run main.go便会把所有的文件都下载到pkg下面的mod的目录下。

总结

因为之前每次把代码放到服务器上去执行的时候,都会报xxx package不存在,因为忘记下载这个包。而是用go module后,是每次go run的时候自动帮我把包下载好,省去了每次还要自己去go get,大大提高了效率。还支持第三方包的管理,简直是好评!