以前配置為使用的存儲庫GOPATH現在配置為模塊。一切都很好,而且更好。然而,protoc 正確地(?。榻Y構中的存儲庫中定義的 protobuf 生成 Golang 代碼,github.com/path/to/repo/protos而我現在更喜歡在GOPATH. 我正在推動他們解決這個問題。有更好的解決方案嗎?我有一個 GitHub 存儲庫。為了討論方便,我們稱之為github.com/acme/toolbox。在子目錄中,我有 protobuf 文件,其中包括:package acme.toolbox.v1;option go_package = "github.com/acme/toolbox/protos";當我GOPATH'ing 時,一切都很好,并且protoc會生成 Golang 綁定,$GOPATH/src/github.com/acme/toolbox/protos并且我的代碼 importpb "github.com/acme/toolbox/protos"可以工作。遷移到Go Modules并非一帆風順,但好處大于成本,我正在為自己和代碼提供面向未來的保障。我的問題是,我不知道如何protoc在我的任意克隆之外生成 Golang 綁定GOPATH。我在生成文件后移動它們,但這感覺......不優雅:cd ${TOOLBOX}protoc \--proto_path=./protos \--go_out=plugins=grpc:/go/src./protos/*.protomv ${GOPATH}/src/github.com/acme/toolbox/protos/*.go ${TOOLBOX}/protos有更好的解決方案嗎?
1 回答

慕的地8271018
TA貢獻1796條經驗 獲得超4個贊
該選項的要點go_package是定義 go 包名稱。話雖如此,它的行為也可能會根據您的設置而有所不同。
如果option go_package定義為有效的 go 包名稱(例如 protos),將在使用該包名稱protoc定義的文件夾中生成文件。--go_out如果option go_package是路徑(例如 github.com/acme/toolbox/protos),protoc將創建相對于定義的文件夾結構--go_out并將文件放置在那里,包名稱與最后一個文件夾名稱相同。
除非我弄錯了你想要做的事情,否則你可以更改go_package為:
option go_package = "protos";
并將您的protoc調用更改為:
protoc \
--proto_path=./protos \
--go_out=plugins=grpc:${TOOLBOX}/protos
./protos/*.proto
${TOOLBOX}/protos這樣做,生成的文件將與 go 包一起放置package protos。
- 1 回答
- 0 關注
- 162 瀏覽
添加回答
舉報
0/150
提交
取消