我在同一目录中有两个.proto
文件,因此second.proto
依赖于first.proto
秒。原型
import "first.proto"
enum ThingINeed {
...something
}
我运行这些命令没有问题:
$ protoc --go_out=generatedsources/first -I. first.proto
$ protoc --go_out=generatedsources/second -I. second.proto
所以目录结构看起来有点像
src
|-first.proto
|-second.proto
|-generatedsources
|-first
|-first.pb.go
|-second
|-second.pb.go
我的问题是当我运行时
$ cd generatedsources/second
$ go build second.pb.go
我收到
/second.pb.go:未定义:ThingINeed
因为second.pb.go
使用来自first.pb.go
的ThingINeed
(也见于first.proto
(
我注意到second.pb.go
中没有import . "generatedsources/first"
行。当我手动放入它时,它工作得很好。但我不应该编辑这些.pb.go
文件,所以我想知道如何解决这个问题。我也不希望编辑这些.proto
文件。
我认为在组织文件时可以反其道而行之。也就是说,有一个generatedsources
目录和尽可能多的.proto文件源目录。将所有CCD_ 13文件保存在同一位置;"找到彼此";自动地
这可以使用--go_out=...
参数来实现。根据您的示例:
$ protoc --go_out=generatedsources -I. first.proto
$ protoc --go_out=generatedsources -I. second.proto
如果你想以不同的方式对.proto
文件进行分组,你可以这样做:
$ protoc --go_out=generatedsources -I. set1/first.proto
$ protoc --go_out=generatedsources -I. set1/second.proto
$ protoc --go_out=generatedsources -I. set2/third.proto
$ protoc --go_out=generatedsources -I. set2/forth.proto
不过,所有文件都需要有不同的文件名。总的来说,这是个好主意。
参考文献:
- 建议:重载选项go_package以指示go导入路径
- 另一个目录中的proto文件最佳实践问题