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

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

Golang proto 文件管理和導(dǎo)入

Golang proto 文件管理和導(dǎo)入

Go
鳳凰求蠱 2023-08-14 15:13:20
我有 2 個(gè) grpc 服務(wù)(service1和service2)相互交互,在某些情況下,rpc 響應(yīng)service1將由 中定義的結(jié)構(gòu)組成service2,在遇到重復(fù)不可避免的幾種情況之后,我認(rèn)為隨著服務(wù)的增長(zhǎng),這些將變得困難為了管理,所以我現(xiàn)在將原始文件重組為這樣的東西.├── app...├── proto│   ├── service1│   │   ├── service1.access.proto │   │   ├── service1.proto│   ├── service2│   │   ├── service2.access.proto│   │   └── service2.proto│   └── model│       ├── model.service1.proto│       └── model.service2.proto└── proto-gen // the protoc generated files     ├── service1    │   ├── service1.access.pb.go    │   └── service1.pb.go    ├── service2    │   ├── service2.access.pb.go    │   └── service2.pb.go    └── model        ├── model.service1.pb.go        └── model.service2.pb.goservice1需要導(dǎo)入模型定義model/model.service2.proto,所以我像這樣導(dǎo)入它import "model/model.service2.proto";option go_package = "proto-gen/service1"; 我.pb.go使用這個(gè)protoc命令生成文件ls proto | awk '{print "protoc --proto_path=proto proto/"$1"/*.proto --go_out=plugins=grpc:."}' | sh該命令生成.pb.go文件很好,但代碼service1.access.pb.go似乎沒(méi)有正確導(dǎo)入模型,我不知道它是否相關(guān),但當(dāng)我運(yùn)行應(yīng)用程序時(shí),它會(huì)拋出此錯(cuò)誤cannot load model: malformed module path "model": missing dot in first path element我現(xiàn)在花了幾個(gè)小時(shí)搜索如何正確導(dǎo)入另一個(gè)原始文件,我似乎找不到任何解決方案
查看完整描述

3 回答

?
白衣非少年

TA貢獻(xiàn)1155條經(jīng)驗(yàn) 獲得超0個(gè)贊

您收到該錯(cuò)誤的原因model是因?yàn)樯傻奈募褂?code>go_package導(dǎo)入文件的 ,并且model不是有效的導(dǎo)入路徑。您必須說(shuō)服生成的文件使用包的完整導(dǎo)入路徑。

這就是我為源樹(shù)所做的:我有一個(gè)類(lèi)似的相互導(dǎo)入的原始文件樹(shù)。如果您的模塊名為 ,github.com/myapp則運(yùn)行protocwith --proto-path=<directory containing github.com>,使用完整路徑(即 )導(dǎo)入其他 proto 文件github.com/myapp/proto/service1/service1.proto,并在 service1.proto 中定義go_package = service1。在我的例子中,此設(shè)置可以正確寫(xiě)入導(dǎo)入路徑。

在采用此解決方案之前,我正在使用go_package=<full path to proto>,因此您也可以嘗試一下。


查看完整回答
反對(duì) 回復(fù) 2023-08-14
?
滄海一幻覺(jué)

TA貢獻(xiàn)1824條經(jīng)驗(yàn) 獲得超5個(gè)贊

在 Burak Serdar 的基礎(chǔ)上,我想提供我的實(shí)現(xiàn)。

在要導(dǎo)入的原型上設(shè)置類(lèi)似于此的包,其中位置是完整路徑。我的路徑一般是github.com/AllenKaplan/[project]/[package]/proto/

option go_package = [path];

在您要導(dǎo)入的文件中添加導(dǎo)入。我的路徑一般是[package]/proto/[package].proto

import = [path from protoc proto path]

最后一部分是 protoc 命令,您必須以連接導(dǎo)入路徑和選項(xiàng) go_package 路徑的方式定義 protopath

如果從github.com/AllenKaplan/[project]目錄執(zhí)行,我會(huì)調(diào)用

protoc -I. --go_out=./[package]/proto [package]/proto/[package].proto

-I. === --proto_path.

設(shè)置-I.整個(gè)項(xiàng)目的原型路徑


需要注意的是,當(dāng)調(diào)用要導(dǎo)入的protoc文件時(shí).proto,您需要添加source_relative:到輸出中,以確保輸出來(lái)自帶有一組包的根目錄。

我在調(diào)用時(shí)對(duì)導(dǎo)入?yún)f(xié)議的實(shí)現(xiàn)github.com/AllenKaplan/[project]/[package]

protoc -I./proto --go_out=paths=source_relative:./proto [package].proto


查看完整回答
反對(duì) 回復(fù) 2023-08-14
?
肥皂起泡泡

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超6個(gè)贊

我在導(dǎo)入時(shí)也遇到了類(lèi)似的問(wèn)題。已使用以下內(nèi)容更改了 .protoc 文件選項(xiàng)包。

option go_package = "./;proto-gen/service1";
  1. 第一個(gè)參數(shù)表示要生成的代碼的相對(duì)路徑。

  2. 您在命令中設(shè)置的相對(duì)于 --go_out 的路徑。


查看完整回答
反對(duì) 回復(fù) 2023-08-14
  • 3 回答
  • 0 關(guān)注
  • 295 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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