第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

帶有 grpc 的 protobuf for Go 在拆分包中

帶有 grpc 的 protobuf for Go 在拆分包中

Go
函數(shù)式編程 2022-12-05 16:30:13
我正在嘗試使用此處所述的六邊形架構(gòu)來制作我的 Go 項(xiàng)目。在我的項(xiàng)目中,我使用的是protoc從.proto文件生成的 gRPC 通信。目錄結(jié)構(gòu):|- grpc.proto|-internal  |-core    |-domain  |-services    |- grpcprotocol我的grpc.proto文件有 go_package 選項(xiàng),它指向我的 Go 項(xiàng)目中的特定目錄syntax = "proto3";option go_package = "github.com/myuser/myrepo/internal/core/services/grpcprotocol";...使用protoc --go_out=internal/core/domain --go_opt=paths=source_relative --go-grpc_out=internal/core/services/grpcprotocol --go-grpc_opt=paths=source_relative ports.proto我能夠在internal/core/domain目錄中生成grpc.pb.go文件,在internal /core/services/grpcprotocol目錄中生成grpc_grpc.pb.go文件。但是,grpc.pb.go有一個(gè)名為 go 的包grpcprotocol,而它應(yīng)該有一個(gè)名為的包domain(我還使用在單獨(dú)的 Go 文件中定義的其他類型)。grpc_grpc.pb.go文件也有代碼使用 grpc.pb.go 中定義的類型而不導(dǎo)入(它把它當(dāng)作是在同一個(gè)包中定義的)。是否可以將這兩個(gè)文件拆分為單獨(dú)的 Go 包并強(qiáng)制執(zhí)行g(shù)rpc_grpc.pb.go中的代碼以從域目錄導(dǎo)入類型,而不是將它們視為在同一包中定義的類型?
查看完整描述

1 回答

?
POPMUISE

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_packagego 代碼生成期間使用。

  • proto 文件中的package是可選的,它使事情更清楚,沒有人可以在不指定完全限定名稱的情況下濫用您的 proto 文件(如果命名正確,會(huì)更安全一些)。


查看完整回答
反對(duì) 回復(fù) 2022-12-05
  • 1 回答
  • 0 關(guān)注
  • 147 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)