php小編香蕉在處理編譯錯誤時,有時會遇到"go mod tidy"指令抱怨bazel產生的protobuf包遺失的問題。這個問題的解決方法其實很簡單,只需要在go.mod檔中手動加入對應的protobuf包依賴即可。透過執行"go mod tidy"指令來更新依賴關係,再次編譯就不會出現套件遺失的問題了。這個方法簡單又有效,能夠幫助開發者快速解決編譯錯誤,提升開發效率。
問題內容
我在目錄中有一個.proto
protobuf 定義文件,我正在使用bazel 從中建立一個go 庫,如下所示(下面使用gazelle
產生的build.bazel
檔案):
load("@rules_proto//proto:defs.bzl", "proto_library") load("@io_bazel_rules_go//go:def.bzl", "go_library") load("@io_bazel_rules_go//proto:def.bzl", "go_proto_library") proto_library( name = "events_proto", srcs = ["events.proto"], visibility = ["//visibility:public"], deps = ["@com_google_protobuf//:timestamp_proto"], ) go_proto_library( name = "proto_go_proto", importpath = "github.com/acme/icoyote/proto", proto = ":events_proto", visibility = ["//visibility:public"], ) go_library( name = "proto", embed = [":proto_go_proto"], importpath = "github.com/acme/icoyote/proto", visibility = ["//visibility:public"], )
其他一些程式碼依賴//icoyote/proto:proto
,當我在模組中運行go mod tidy
時,它抱怨找不到套件github. com/acme/icoyote/proto
: p>
go: finding module for package github.com/acme/icoyote/proto github.com/acme/icoyote/cmd/icoyote imports github.com/acme/icoyote/proto: no matching versions for query "latest"
任何沒有 bazel 整合的 ide(例如 vscode、沒有 bazel 插件的 goland/intellij)也會抱怨
我該怎麼辦?
解決方法
之所以發生這種情況,是因為bazel 確實使用protoc
在build
檔案中的go_proto_library
規則下產生.go
文件,但僅將它們寫到bazel 下的臨時目錄中- bin
由go_library
規則使用,並且go mod tidy
似乎沒有研究bazel-bin
(可能是因為它是一個符號鏈接,但如果是的話,這些文件相對於go.mod
位置的路徑都是錯誤的)
一種選擇是透過自己呼叫protoc
手動產生go 文件,並刪除build
文件中的proto_library
和go_proto_library
規則,然後更改go_library
規則來建立生成的檔案。這是次優的,因為每次更改.proto
檔案時都必須手動重新執行protoc
(如果放入//go:generate
指令,則必須重新執行gogenerate
)。
相反,我們可以執行以下操作:
- 將檔案
empty.go
加入到包含.proto
檔案的目錄中。它應該看起來像這樣:
package proto
- 然後告訴
ngazelle
忽略empty.go
(這樣當您執行gazelle --fix
時,它不會嘗試將go_library
規則加入到build
檔案中)。我們透過將以下內容新增至build
檔案來實現此目的:
# gazelle:exclude empty.go
這足以讓 go mod tidy
閉嘴。
這也將使 ide 停止抱怨導入,儘管在引用該套件中應該包含的任何內容時仍然會出現錯誤。如果您不想放棄 ide 而選擇帶有 bazel 插件的優秀 goland 或 intellij idea,您可能必須求助於手動 protoc
方法。也許有一種方法可以創建一個符號連結到bazel 在bazel-bin
下寫出生成的.go
檔案的位置,並強制go mod tidy
跟隨它,但我還沒有嘗試過。如果您這樣做並且有效,請分享!
以上是`go mod tidy` 抱怨 bazel 產生的 protobuf 包丟失的詳細內容。更多資訊請關注PHP中文網其他相關文章!

Gooffersrobustfeaturesforsecurecoding,butdevelopersmustimplementsecuritybestpracticeseffectively.1)UseGo'scryptopackageforsecuredatahandling.2)Manageconcurrencywithsynchronizationprimitivestopreventraceconditions.3)SanitizeexternalinputstoavoidSQLinj

Go的錯誤接口定義為typeerrorinterface{Error()string},允許任何實現Error()方法的類型被視為錯誤。使用步驟如下:1.基本檢查和記錄錯誤,例如iferr!=nil{log.Printf("Anerroroccurred:%v",err)return}。 2.創建自定義錯誤類型以提供更多信息,如typeMyErrorstruct{MsgstringDetailstring}。 3.使用錯誤包裝(自Go1.13起)來添加上下文而不丟失原始錯誤信息,

對效率的Handleerrorsinconcurrentgopragrs,UsechannelstocommunicateErrors,enplionErrorWatchers,Instertimeout,UsebufferedChannels和Provideclearrormessages.1)USEchannelelStopassErtopassErrorsErtopassErrorsErrorsErrorsFromGoroutInestOthemainFunction.2)

在Go語言中,接口的實現是通過隱式的方式進行的。 1)隱式實現:類型只要包含接口定義的所有方法,就自動滿足該接口。 2)空接口:interface{}類型所有類型都實現,適度使用可避免類型安全問題。 3)接口隔離:設計小而專注的接口,提高代碼的可維護性和重用性。 4)測試:接口有助於通過模擬依賴進行單元測試。 5)錯誤處理:通過接口可以統一處理錯誤。

go'sinterfacesareimpliclyimplyed,與Javaandc#wheRequireexplitiCimplation.1)Ingo,AnyTypeWithTheRequiredMethodSautSautSautautapitymethodimimplementsaninternionsaninterninternionsaninterface.2)

Toensureinitfunctionsareeffectiveandmaintainable:1)Minimizesideeffectsbyreturningvaluesinsteadofmodifyingglobalstate,2)Ensureidempotencytohandlemultiplecallssafely,and3)Breakdowncomplexinitializationintosmaller,focusedfunctionstoenhancemodularityandm

goisidealforbeginnersandsubableforforcloudnetworkservicesduetoitssimplicity,效率和concurrencyFeatures.1)installgromtheofficialwebsitealwebsiteandverifywith'.2)

開發者應遵循以下最佳實踐:1.謹慎管理goroutines以防止資源洩漏;2.使用通道進行同步,但避免過度使用;3.在並發程序中顯式處理錯誤;4.了解GOMAXPROCS以優化性能。這些實踐對於高效和穩健的軟件開發至關重要,因為它們確保了資源的有效管理、同步的正確實現、錯誤的適當處理以及性能的優化,從而提升軟件的效率和可維護性。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

記事本++7.3.1
好用且免費的程式碼編輯器

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

SublimeText3漢化版
中文版,非常好用

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能