go module 推出的原因
废话,当然是解决开发中的痛点了。。。
据我所知,php
的包管理工具是composer
,node
有npm
,java
有maven
,而经过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
,大大提高了效率。还支持第三方包的管理,简直是好评!