建立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
沒有留言:
張貼留言