網頁

2021/6/6

Golang 建立Go module

建立Go module的方式如下。


本篇參考官方教學「Tutorial: Create a Go module」。


範例

範例環境:

  • macOS Catalina (10.15.7)
  • Go 1.16.3

在目錄go-workspace新增兩個資料夾go-demogreetings


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=../greetingsgo-demogo.mod內容加上replace abc.com/greetings => ../greetingsabc.com/greetings module path導向本機目錄../greetings

~/../go-workspace/go-demo$ go mod edit -replace=abc.com/greetings=../greetings

接著在go-demo目錄執行go mod tidygo.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


沒有留言:

張貼留言