1.介绍
在Go 1.11之后go的包管理工具就已经开始转向使用Go Module而不是GOPATH了,输入go env就可以看到自己的go 版本以及GO111MODULE是否打开,如下:
上面GO111MODULE表示 GO mod是否打开,GOPATH是go get后包的存放路径,GOPROXY则是设置的代理。
2.GO Mod的使用
尝试在本地新建一个hello项目并初始化,如下:
得到目录结构如下:
新建hello.go文件:
package hello
import (
"rsc.io/quote/v3"
)
// hello
func Hello() string {
return quote.HelloV3()
}
func Proverb() string {
return quote.Concurrency()
}
test_hello.go:
package hello
import "testing"
func TestHello(t *testing.T) {
want := "Hello, world."
if got := Hello(); got != want {
t.Errorf("Hello() = %q, want %q", got, want)
}
}
func TestProverb(t *testing.T) {
want := "Concurrency is not parallelism."
if got := Proverb(); got != want {
t.Errorf("Proverb() = %q, want %q", got, want)
}
}
然后执行 go mod init,如下:
其中go.mod就是我们的包管理文件:
其中module指定了我们的包的名称,此处名称一定要是在托管平台下的路径,否则之后go get会找不到包。go 1.15申明go的版本。
哦哦,上面的test_go.go命名错,测试文件后缀必须要是_test,否则不会被检测到,目前目录结构如下:
执行测试用例观察是否通过:
go test时,go工具会帮我们检查项目里面的依赖并下载,此时go.mod文件如下:
其中多了一个require 后面时要求的包以及版本,另外目录下为多出一个go.sum文件:
一般不需要更改该文件,它存储着依赖包的校验码,防止相同的包重复下载。
完成后可以将我们的包打tag并提交到远程:
至此我们的包就可以通过go get安装了,我们新建一个项目:
最后只要我们通过go get命令后,经过代理,就可以在go.dev上搜索到我们已经发布的包,所有人均可使用,如下:
结束。