亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

有沒有辦法設置多個本地 Go 模塊,以便它們可以在一個 Docker 容器中運行

有沒有辦法設置多個本地 Go 模塊,以便它們可以在一個 Docker 容器中運行

Go
HUX布斯 2022-09-26 19:59:45
因此,我的目標是建立一個本地開發環境,其中多個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 文件中將所有內容都設為小寫。


查看完整回答
反對 回復 2022-09-26
?
回首憶惘然

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


查看完整回答
反對 回復 2022-09-26
  • 2 回答
  • 0 關注
  • 121 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號