1 回答

TA貢獻(xiàn)1765條經(jīng)驗(yàn) 獲得超5個(gè)贊
你最好的解決方案是將你想要的代碼和你想要的代碼分開grpcprotocol到domain單獨(dú)的文件中。如:
域.proto
syntax = "proto3";
package domain;
option go_package = "github.com/myuser/myrepo/internal/core/domain";
//...
grpc.proto
syntax = "proto3";
package grpcprotocol;
option go_package = "github.com/myuser/myrepo/internal/core/services/grpcprotocol";
//...
然后你可以導(dǎo)入你domain.proto的grpc.proto,通過簡(jiǎn)單地寫import "domain.proto";,提供一個(gè)--proto_pathifdomain.proto并且grpc.proto不在同一個(gè)目錄中。最后,要從domain.proto中引用一個(gè)對(duì)象,grpc.proto您可以這樣寫:
domain.AnObject
之后,您可以利用--go_opt=moduleand--go-grpc_opt=module去除模塊名稱go_package并在正確的位置生成代碼。喜歡:
protoc --go_out=. --go_opt=module=github.com/myuser/myrepo --go-grpc_out=. --go-grpc_opt=module=github.com/myuser/myrepo *.proto
這將做的是,它將github.com/myuser/myrepo從每個(gè)中刪除go_package并基本上從模塊的根開始。這就是為什么你可以做一個(gè)--go_out=.and --go-grpc_out=.。
希望有幫助,讓我知道如何進(jìn)一步改進(jìn)我的答案。
筆記
和protobuf的封裝
go_package
是不一樣的。前者僅用于 protobuf 以提供上下文,它擴(kuò)展了限定名稱。在go_package
go 代碼生成期間使用。proto 文件中的
package
是可選的,它使事情更清楚,沒有人可以在不指定完全限定名稱的情況下濫用您的 proto 文件(如果命名正確,會(huì)更安全一些)。
- 1 回答
- 0 關(guān)注
- 147 瀏覽
添加回答
舉報(bào)