proto 描述文件可以通过命令 protoc --proto_path=. --go_out=paths=source_relative:. xx/a/a.proto
生成 go 的代码,生成代码里面有个 RawDescriptor ,它是一个 byte 数组,肉眼是不可读的,需要通过内部相关的方法,加断点形式查看,其实它是对 proto 文件的一个整体描述,有那些方法,有那些枚举等等,我这里最关心的是一个叫 path 的参数。
proto 和 proto 之间依赖的时候是通过 package 名字,必须全局有一个地方统一存储 package 和文件具体路径的地方,但是正由于这个路径是写在 RawDescriptor 中的,并不是通过运行时获取(好像也不太好弄),如果 RawDescriptor 中的 path 错误,将导致 proto 的依赖出现错误。
这边逐步排查,发现和 protoc 执行的环境有关系,在不同的路径下执行 protoc,得到的 path 是不同的,所以为了得到一个合适的 path,可以通过调整当前的路径,最终我在 xx 的目录下,执行 protoc --proto_path=. --go_out=paths=source_relative:. a/a.proto
得到了我预期的结果。