gpt4 book ai didi

Golang proto 文件管理和导入

转载 作者:行者123 更新时间:2023-12-01 20:27:28 27 4
gpt4 key购买 nike

我有 2 个 grpc 服务( service1service2 ),它们相互交互,在某些情况下,service1 的 rpc 响应will 由 service2 中定义的结构组成,在经历了不可避免的重复的几种情况之后,我认为随着服务的增长,这些将难以管理,所以我现在将 proto 文件重组为这样的东西

.
├── 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.go
service1需要在 model/model.service2.proto 上导入模型定义,所以我像这样导入它
import "model/model.service2.proto";

option go_package = "proto-gen/service1";

我生成 .pb.go文件,使用这个 protoc命令
ls proto | awk '{print "protoc --proto_path=proto proto/"$1"/*.proto --go_out=plugins=grpc:."}' | sh

该命令生成 .pb.go文件很好,但是 service1.access.pb.go 上的代码似乎没有正确导入模型,我不知道它是否相关但是当我运行应用程序时,它会抛出这个错误
cannot load model: malformed module path "model": missing dot in first path element

我现在花了几个小时在谷歌上搜索如何正确导入另一个 proto 文件,我似乎找不到任何解决方案

最佳答案

您收到关于 model 的错误的原因是因为生成的文件使用了go_package导入的文件,model不是有效的导入路径。您必须说服生成的文件使用包的完整导入路径。

这就是我为我的源代码树所做的:我有一个相似的 proto 文件树相互导入。如果您的模块已命名,请说 github.com/myapp ,然后运行 ​​protoc--proto-path=<directory containing github.com> ,使用完整路径导入其他proto文件,即github.com/myapp/proto/service1/service1.proto ,并在 service1.proto 中定义 go_package = service1 .在我的情况下,此设置正确写入了导入路径。

在采用此解决方案之前,我使用的是 go_package=<full path to proto> ,因此您也可以尝试一下。

关于Golang proto 文件管理和导入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59367508/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com