Go是一種強大的編程語言,近年來在微服務架構中越來越受歡迎。它的簡潔性、高效性和并發性使其成為構建高性能應用程序的理想選擇。在使用Go構建微服務時,存儲庫的布局是一個重要的考慮因素。在本文中,php小編香蕉將介紹一種具有共享代碼的微服務存儲庫布局,幫助您更好地組織和管理代碼。
問題內容
我們最近開始使用 go 來開發新的微服務。每個微服務都是一個 go 模塊,我們將它們作為單一存儲庫進行管理:
/ services/ s1/ go.mod main.go s2/ go.mod main.go
登錄后復制
這工作正常,但現在我們需要在 s1
和 s2
之間共享一些代碼 – 兩個服務使用的一些結構、上傳到 s3 的函數等。
處理這種情況的正確方法是什么?理想情況下,我在存儲庫根目錄中有一個 common
目錄(services
的同級目錄)并將公共代碼放在那里 – 但是在編譯 s1
和 s2
時,go 將如何從那里獲取代碼?
解決方法
我認為你所問的實際上只是“如何構建 go 應用程序以生成多個二進制文件?”。
您可以將 go.mod
移動到頂級目錄重命名,以便您擁有以下布局:
. ├── common │?? └── common.go ├── go.mod └── services ├── s1 │?? └── main.go └── s2 └── main.go
登錄后復制
還有一個 go.mod
,其開頭類似:
module mymodule
登錄后復制
如果 common/common.go
看起來像這樣:
package common func commonfunction() string { return "this is a common function" }
登錄后復制
然后在services/s1/main.go
中,可以導入common
模塊:
package main import ( "mymodule/common" "fmt" ) func main() { res := common.commonfunction() fmt.println(res) }
登錄后復制
您將像這樣構建 s1
服務:
go build ./services/s1
登錄后復制
構建 s2
類似:
go build ./services/s2
登錄后復制
您通常會有一個頂級 makefile
來自動構建多個服務。