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.mod
對adc.com/greetings
的replace
及require
敘述刪除,因為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-demo
及greetings
為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
沒有留言:
張貼留言