AdSense

網頁

2022/3/28

Golang 工作區模式 workspace mode

Go 1.18新功能多模組工作區模式(multi-module workspaces)介紹。


簡介

Go 1.18以前修改多個互相引用的module時非常不便,因為Go命令只會對一個module進行建構,依賴的module只能在編譯時從module cache載入。當同時開發多個module時,例如本機的module A引用另一個本機的module B,則必須將B放到module repostiry或module cache來被引用;或是在A的go.mod使用replace把B的module path替換為本機module B的目錄,當依賴的module數量很多則每個都要寫一次非常麻煩。而Go 1.18的multi-module workspaces就是要解決以上問題,在workspace mode下Go命令可以同時對workspace中的多個module編譯及引用。


範例

範例環境:

  • Go 1.18

在「Golang 建立Go module」範例中module abc.com/go-demo引用本機的另一個module abc.com/greetings時必須利用replace指示把module path指向本機目錄。下面改用workspace mode同時對兩個module編譯及執行。

把原本go-demo/go.modadc.com/greetingsreplacerequire敘述刪除,因為module的編譯及引用將改用workspace mode達成。

go-demo/go.mod

module abc.com/demo

go 1.18

go-workspace目錄以命令列執行go work init初始化此目錄為workspace,也就是在目錄中會新增一個go.work檔內容如下:

go.work

go 1.18

接著在go-workspace目錄執行go work use ./go-demo ./greetings,作用為使用目錄下的go-demogreetings為workspace的module。執行後go.work內容如下:

go.work

go 1.18

use (
    ./go-demo
    ./greetings
)

範例檔案如下:

~/../go-workspace
├─ go-demo/
│  ├─ main.go
│  └─ go.mod
├─ greetings/
│  ├─ go.mod
│  └─ greeting.go
└─ go.work


測試

go-workspace執行go run abc.com/demo來執行module abc.com/demo,可以看到可正確編譯並引用module abc.com/greetings的程式並執行。

~/../go-workspace$ go run abc.com/demo
Hello John


沒有留言:

AdSense