使用原始文件的共享外部包?
Posted
技术标签:
【中文标题】使用原始文件的共享外部包?【英文标题】:Using a shared external package for proto files? 【发布时间】:2018-12-03 15:55:38 【问题描述】:我们有一些项目依赖于共享类型进行通信。团队决定使用这些类型的共享包,并希望在此实现中使用协议缓冲区。如果重要的话,语言是 Go,而且所有这些项目都不公开。
我们如何使用项目中未定义的协议缓冲区类型?我似乎找不到在应用程序之间共享完全外部类型的方法。我阅读的所有内容都倾向于解释如何使用子包 .proto
文件,而不是由您项目中的另一个项目中的另一个开发人员/团队定义的类型。
【问题讨论】:
非基于 Go 的解决方案是使用 git 子模块将那些.proto
文件克隆到您的项目中,并使用 git 定期更新它。这是简单的子包方法。
Go 不将代码限制在单个存储库中。您可以使用导入路径和go get
来使用来自任何存储库的代码。在这方面,将 proto 文件放在不同的存储库中并不特殊。只需将生成的 Go 文件提交到 proto 的存储库中,然后将该路径导入您想要使用它的 Go 项目中。有一些技巧可以使 go get
与私有存储库(谷歌它)一起工作,或者只是手动将存储库克隆到您的 Go 工作区。
【参考方案1】:
您可以使用protoc
并指定包含路径,例如:
protoc -I/usr/local/include -I. \
-I$GOPATH/src \
-I$GOPATH/src/github.com/grpc-ecosystem/grpc-gateway/third_party/googleapis \
--go_out=$DST_DIR \
my-proto.proto
希望有帮助
【讨论】:
【参考方案2】:为您的新包创建一个存储库(从.proto
文件自动生成)。即:
protoc --go_out=$GOPATH/your/git/repo /path/to/your/schema.proto
确保您git push
回购。
然后在需要使用它的外部项目上,只需包括:
import "your/git/repo/schema/yourStruct"
【讨论】:
以上是关于使用原始文件的共享外部包?的主要内容,如果未能解决你的问题,请参考以下文章