go modules 存在的意义是方便代码的共享(虽然这会使本身开发过程当中有一些小小的麻烦)git
开发第一步,建立一个github仓库,而后克隆到本地github
首先建立一个github仓库github.com/<username>/hello
,这里个人仓库地址是:github.com/fudute/hello
。golang
而后在本地拉取远程仓库:shell
git clone https://github.com/fudute/hello.git cd hello
建立一个modulebash
go mod init github.com/fudute/hello
注意这里的后缀要和github的网址一致函数
这会在当前目录下建立一个go.mod文件,表示这是一个module。测试
而后建立一个文件hello.go:优化
package hello // Hello return "Hello World" func Hello() string { return "Hello World!" }
和测试文件hello_test.gocode
func TestHello(t *testing.T) { tests := []struct { name string want string }{ {name: "test", want: "Hello world!"}, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { if got := Hello(); got != tt.want { t.Errorf("Hello() = %v, want %v", got, tt.want) } }) } }
如今进行测试:开发
> go test PASS ok example.com/hello 0.002s
说明功能没有问题,这时候就能够准备提交了。可是在提交以前,还存在一个版本问题
module的版本问题
版本的命名方式为 vMAJOR.MINOR.PATCH
,有下面这些规则:
将module push到github上
先提交当前目录下的文件:
git add * git commit -m "my first module"
须要先给module添加一个版本标记,指定版本为 v0.1.0
git tag v0.1.0
而后push到github上
git push origin v0.1.0
建立另外一个项目,使用以前的module
接下来在本地建立一个main module
mkdir main cd main go mod init main
建立文件main.go
package main import ( "fmt" "github.com/fudute/hello" ) func main() { fmt.Println(hello.Hello()) }
在这里导入了以前建立的module,路径是github.com/fudute/hello
,而后直接运行:
> go run . go: extracting github.com/fudute/hello v0.1.0 Hello World!
能够看到,golang会自动从github上拉取module,而后成功编译运行。
自动下载的module能够在$GOPATH/pkg/mod
目录下看到。