go modules——HelloWorld示例
- 2021 年 2 月 17 日
- 筆記
go modules——HelloWorld示例
-
go modules 存在的意義是方便程式碼的共享(雖然這會使自己開發過程中有一些小小的麻煩)
-
開發第一步,創建一個github倉庫,然後克隆到本地
首先創建一個github倉庫
github.com/<username>/hello
,這裡我的倉庫地址是:github.com/fudute/hello
。然後在本地拉取遠程倉庫:
git clone //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
目錄下看到。