我相當肯定這是操作員錯誤,我現在沒有清楚地思考。這是設置:$GOPATH/src/github.com/<company>/<service a>/proto/a.proto$GOPATH/src/github.com/<company>/<service b>/proto/b.proto等等現在在 proto 文件中,我使用類似于 go(可能是問題)的導入,例如a.proto: import "github.com/<company>/<service b>/b.proto"我可能有兩個不同的問題。我無法使用正確編譯導入go:generate protoc我無法將輸出a.pb.go文件放置在$GOPATH/src/github.com/<company>/<service a>/proto/路徑中。我嘗試了多種配置,可能組合不正確。 Using option go_package = "github.com/<company>/<service b>/proto"在每個.proto文件中go generate 的多種變體;go:generate protoc --proto_path=.:$GOPATH/src --go_out=$GOPATH/src a.protogo:generate protoc --proto_path=.:$GOPATH/src --go_out=. a.proto go:generate protoc --go_out=import_prefix=github.com/<company>/:. api.proto我顯然對 protoc 如何看待導入路徑和文件輸出的理解很差。有人指出我做錯了什么的方向嗎?謝謝!更新 #1 在 a.proto 中;option go_package = "github.com/<company>/<service a>/proto";import "github.com/<company>/<service b>/proto/b.proto";和去生成;//go:generate protoc --proto_path=$GOPATH/src --go_out=$GOPATH/src/github.com/<company>/<service a>/proto a.proto使用 a.proto 從 proto 目錄中的 go 文件調用它。我收到了錯誤;a.proto:文件不在使用--proto_path(或-I)指定的任何路徑中。您必須指定一個 --proto_path ch 包含此文件。請注意,proto_path 必須是 .proto 文件名的精確前綴—— protoc 太笨了,無法確定兩個路徑(例如絕對路徑和相對路徑)何時相等(這比您想象的要難)。我已經確認 $GOPATH 到了預期的位置。解決方案感謝 Shivam Jindal 為我指明了正確的方向。導入與他的解決方案中描述的完全一樣。輸出是我濫用 --go_out 和選項 go_package 的問題。我使用 go_package 指定輸出位置,使用 --go_out 指定類似于 --proto_path 的根目錄?,F在一切正常。option go_package = "github.com/<company>/<service a>/proto";和//go:generate protoc --proto_path=$GOPATH/src/ --go_out=$GOPATH/src/ $GOPATH/src/github.com/<company>/<service a>/proto/a.proto謝謝!
1 回答

鴻蒙傳說
TA貢獻1865條經驗 獲得超7個贊
首先,option go_package
根本不用于其他依賴項導入,它是 Go 包名稱,(a.pb.go file)
將放置 Go 的新 proto 綁定。
現在來到輸出文件位置,我可以看到你正在使用 go-generate。--go_out=
首先,如果使用的路徑是相對路徑,則取決于您從哪個目錄調用。我會說使用絕對路徑。如果您想將輸出文件放在您提到的那個位置,請--go_out=$GOPATH/src/github.com/<company>/<service a>/proto/
在 go-generate 中使用。
要正確導入其他文件b.proto
,請a.proto
使用完全限定的導入路徑。就--proto_path $GOPATH/src
在 go-generate 中使用。另外,請使用您看到的錯誤更新問題,以防它不起作用。
有關導入路徑的更多信息,請參閱此內容。
- 1 回答
- 0 關注
- 435 瀏覽
添加回答
舉報
0/150
提交
取消