php小編香蕉在使用Go Buildpack時遇到了一個問題:「無法找到本地模組,我缺少什麼?」。 Go Buildpack 是用於在Cloud Foundry平台上建立和運行Go應用程式的工具。這個問題通常是由於缺少Go依賴函式庫或配置不正確所導致的。解決這個問題的方法是檢查Go專案的依賴關係,並確保正確設定了GOPATH和GO111MODULE等環境變數。
我正在嘗試在https://fly.io 上構建並啟動go 應用程序,但在構建時無法找到我的測試和模板包,如下所示:
. ├── cmd │ ├── doc │ │ ├── go.mod │ │ └── main.go │ ├── git │ │ ├── go.mod │ │ └── main.go │ ├── imp │ │ ├── go.mod │ │ └── main.go │ ├── log │ │ ├── go.mod │ │ └── main.go │ ├── met │ │ ├── go.mod │ │ └── main.go │ ├── orc │ │ ├── go.mod │ │ └── main.go │ ├── pub │ │ ├── go.mod │ │ └── main.go │ ├── rep │ │ ├── go.mod │ │ └── main.go │ └── web │ ├── fly.toml │ ├── go.gen │ ├── go.mod │ ├── go.sum │ ├── handlers.go │ ├── handlers_test.go │ ├── main.go │ ├── main_test.go │ ├── router.go │ └── router_test.go ├── contributing.md ├── go.mod ├── go.work ├── internal ├── license.txt ├── main.go ├── pctl ├── pkg │ ├── **templates** │ │ ├── base.qtpl │ │ ├── base.qtpl.go │ │ ├── go.mod │ │ ├── go.sum │ │ ├── whoami.qtpl │ │ └── whoami.qtpl.go │ └── **test** │ ├── go.mod │ └── test.go └── readme.md
https://paketo.io/docs/reference/go-reference/#package-management-with-go-modules 狀態:
the buildpack will vendor dependencies using go modules if the app source code contains a go.mod file. during the build phase, the go-mod-vendor buildpack(opens in a new tab) checks to see if the application requires any external modules and if it does, runs the go mod vendor command for your app. the resulting vendor directory will exist in the app’s root directory and will contain all packages required for the build.
查看建置日誌,我發現 go modvendor 確實已運行。
Paketo Buildpack for Go Distribution 2.2.3 Resolving Go version Candidate version sources (in priority order): go.mod -> ">= 1.19" -> "" Selected Go version (using go.mod): 1.19.5 Executing build process Installing Go 1.19.5 Completed in 35.526s Generating SBOM for /layers/paketo-buildpacks_go-dist/go Completed in 0s Paketo Buildpack for Go Mod Vendor 1.0.7 Checking module graph Running 'go mod graph' Completed in 1.166s Executing build process Running 'go mod vendor' Completed in 9.851s Generating SBOM for /workspace/go.mod Completed in 21ms Paketo Buildpack for Go Build 2.0.8 Executing build process Running 'go build -o /layers/paketo-buildpacks_go-build/targets/bin -buildmode pie -trimpath .' Failed after 611ms failed to execute 'go build': exit status 1 handlers.go:5:2: cannot find package "." in: /workspace/vendor/templates main.go:8:2: cannot find package "." in: /workspace/vendor/test ERROR: failed to build: exit status 1 Error failed to fetch an image or build from source: executing lifecycle: failed with status code: 51
handlers.go:5:2: 「範本」
main.go:8:2: "測試"
我現在正在嘗試私人倉庫。
這不是一個很好的解決方案,但仍然可以編輯主機檔案以使模組指向本機檔案伺服器。
# vim /etc/hosts 127.0.0.1 <module name>
如果我發現問題是出在 fly 還是 buildpack 上,我會編輯這個答案。問題是當 fly 運行 go modvendor 時,它不遵守 go.mod 中的替換指令。
只要模組名稱採用 url 格式,自行執行的 go mod供應商就會正確複製所有內容。它不必是有效的網址。
另一個解決方案是簡單地將程式碼託管在有效的 url 上並完成它。我可能缺少一面旗幟,但我還沒有找到它。我希望遇到此問題的任何人都可能會發現此答案同時有所幫助。
以上是Go Buildpack 無法找到本機模組。我缺什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!