go modules——HelloWorld示例
-
go modules 存在的意义是方便代码的共享(虽然这会使自己开发过程中有一些小小的麻烦)
-
开发第一步,创建一个github仓库,然后克隆到本地
首先创建一个github仓库
github.com/<username>/hello
,这里我的仓库地址是:github.com/fudute/hello
。然后在本地拉取远程仓库:
git clone https://github.com/fudute/hello.git cd hello
-
创建一个module
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.go
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
,有下面这些规则:- 当API发生向后不兼容的修改时,例如删除某个API函数,这时候需要修改MAJOR版本号
- 当API发生向后兼容的修改是,例如添加API函数,这时候需要修改MINOR版本号
- 当API没有发生修改,只是做了bug修复或者优化,这时候需要修改PATCH就可以
- v0版本是不稳定版本,这个阶段可能发生各种修改,是开发时的版本。如果觉得开发的已经足够完善,那么就可以提高到v1版本,表示这是一个相对稳定的版本。
-
将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
目录下看到。