建立Go module的方式如下。
本篇參考官方教學「Tutorial: Create a Go module」。
範例
範例環境:
- macOS Catalina (10.15.7)
- Go 1.16.3
在目錄go-workspace新增兩個資料夾go-demo及greetings。
abc.com/greetings
在greetings目錄以命令列執行go mod init abc.com/greetings生成go.mod檔來定義module名稱為abc.com/greetings。
~/../go-workspace/greetings$ go mod init abc.com/greetings
go: creating new go.mod: module abc.com/greetings
在greetings目錄建立greeting.go內容如下,宣告函式Hello()可輸入一個字串參數name並回傳字串;以大寫開頭為exported name才能被其他package引用。
greeting.go
package greetings
func Hello(name string) string {
message := "Hello " + name
return message
}
到此即完成abc.com/greetings module。
abc.com/demo
在go-demo目錄以命令列執行go mod init abc.com/demo生成go.mod定義module abc.com/demo。
~/../go-workspace/go-demo$ go mod init abc.com/demo
go: creating new go.mod: module abc.com/demo
在go-demo目錄建立main.go內容如下。使用import匯入greetings module並呼叫greetings.Hello()函式。
main.go
package main
import (
"fmt"
"abc.com/greetings"
)
func main() {
message := greetings.Hello("John")
fmt.Println(message)
}
由於abc.com/greetings module是在本機目錄而非module repository,所以需在go-demo目錄執行go mod edit -replace=abc.com/greetings=../greetings在go-demo的go.mod內容加上replace abc.com/greetings => ../greetings把abc.com/greetings module path導向本機目錄../greetings。
~/../go-workspace/go-demo$ go mod edit -replace=abc.com/greetings=../greetings
接著在go-demo目錄執行go mod tidy在go.mod加入程式的module依賴,即abc.com/greetings。
~/../go-workspace/go-demo$ go mod tidy
go: found abc.com/greetings in abc.com/greetings v0.0.0-00010101000000-000000000000
檔案如下:
~/../go-workspace
├─ go-demo/
│ ├─ main.go
│ └─ go.mod
└─ greetings/
├─ go.mod
└─ greeting.go
最終go-demo/go.mod檔的內容如下
go-demo/go.mod
module abc.com/demo
go 1.16
replace abc.com/greetings => ../greetings
require abc.com/greetings v0.0.0-00010101000000-000000000000
greetings/go.mod
module abc.com/greetings
go 1.16
測試
最後在go-demo目錄執行go run main.go編譯並執行main.go,印出結果如下。
~/../go-workspace/go-demo$ go run .
Hello John
沒有留言:
張貼留言