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 來自動構建多個服務。






