因此,我的目標是建立一個本地開發環境,其中多個Go服務(全部作為獨立模塊)在多個Docker容器和一個Go模塊中運行,所有服務都可以用來啟動一個連接到數據庫等的新服務,而無需在每個模塊/服務中重復此代碼。所以我的結構看起來像這樣(在$GOPATH/src/github.com/名稱/后端/中):|--services| |--service1| |--Dockerfile| |--main.go| |--go.mod| |--service2| |--Dockerfile| |--main.go| |--go.mod|--serviceHelper| |--serviceHelper.go| |--go.mod我的泊塢文件目前只是一個普通的 Go 多克文件:FROM golang:alpine AS build-envWORKDIR /backendADD . /backendRUN cd /backend && go build -o service1FROM alpineRUN apk update && \ apk add ca-certificates && \ update-ca-certificates && \ rm -rf /var/cache/apk/*WORKDIR /backendCOPY --from=build-env /backend/service1 /backendEXPOSE 8080ENTRYPOINT ["./service1"]我的go.mod文件也只是:module github.com/name/backend/services/service1go 1.17我現在遇到的問題是,你要么必須從github存儲庫中提取一個模塊,我不想這樣做,要么將serviceHelper代碼放在服務的每個模塊中,我也不想這樣做。我使用VSCode,從那以后就知道你必須將單個模塊放入單個工作區文件夾中。我仍然無法設法在本地配置模塊以在一個服務中導入普通包,例如我的本地包。我使用Apple M1,我希望這可能不會引起問題。github.com/gorilla/mux我需要如何配置 go.mod 文件、Docker 文件和 Go 導入,以便我可以在編輯器中正常調試 Go(即,服務助手模塊不僅直接加載到 Docker 容器中),還可以在本地運行所有內容,而不必從 github 獲取服務助手?更新:我已經嘗試了很多變體,但是有了這個(謝謝你的答案colm.anseo),我得到了最少的錯誤消息,但它仍然試圖連接到github,我不想要。因此,更新后的 go.mod 文件如下所示:module github.com/name/backend/services/service1go 1.17require ( github.com/name/backend/serviceHelper v1.0.0 github.com/gorilla/mux v1.8.0)replace github.com/name/backend/serviceHelper => ../../serviceHelper然后,當我嘗試使用 構建一個新的 go.sum 時,會發生此錯誤(這就是我所說的錯誤,“并且還可以在本地運行所有內容,而不必從 github 獲取 serviceHelper”,因為我之前遇到過此錯誤):go mod tidygithub.com/name/backend/servicehelper: cannot find module providing package github.com/name/backend/servicehelper: module github.com/name/backend/servicehelper: git ls-remote -q origin in /Users/myName/go/pkg/mod/cache/vcs/...: exit status 128: ERROR: Repository not found. fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists.我不希望它連接到github,我只希望它在本地運行。在 colm.anseo 的答案的幫助下,我認為我知道如何創建一個有效的 Dockerfile,所以這不再是一個問題了。
2 回答

慕哥9229398
TA貢獻1877條經驗 獲得超6個贊
replace github.com/name/backend/serviceHelper => ../../serviceHelper ... github.com/name/backend/servicehelper: cannot find module
導入區分大小寫。我建議在導入、替換語句和要導入的包的 go.mod 文件中將所有內容都設為小寫。

回首憶惘然
TA貢獻1847條經驗 獲得超11個贊
如果您還沒有準備好將代碼發布到互聯網git存儲庫(如 ),則可以在中使用 replace 指令:github.comgo.mod
module github.com/me/my_app
go 1.17
require (
github.om/gorilla/handlers v1.5.1
github.com/me/my_srv1
)
replace github.com/me/my_srv1 => ./my_srv1
在您的Go代碼中,您可以導入此代碼,就好像它來自互聯網一樣:
// go code
import (
"github.om/gorilla/handlers"
"github.com/me/my_srv1"
)
在 Docker 上下文中,必須確保在與 相同的相對路徑中復制并訪問該目錄。./my_srv1go build
go build然后與將一起從互聯網上拉取軟件包 - 但使用本地開發目錄作為您的(尚未發布的)存儲庫的替代品。go.modgorilla/mux
- 2 回答
- 0 關注
- 121 瀏覽
添加回答
舉報
0/150
提交
取消