最近公司准备整项目,需要用到python 和 golang 协同工作,而如何协同这一问题,在restful api 和 grpc之间,我们选择了grpc 。
Protoc-gen-go 报错
首先第一条报错:
1 | protoc-gen-go: program not found or is not executable |
一看就知道是没安装好对吧?咱们再安装一遍
1 | go get -d -u github.com/golang/protobuf/protoc-gen-go |
然后
1 | go install github.com/golang/protobuf/protoc-gen-go |
再跑一遍
1 | protoc --go_out=paths=source_relative:. inputs/x.proto |
结果:
1 | protoc-gen-go: program not found or is not executable |
原因是并没有把 $GOPATH/Bin
放入环境变量,在我把go版本从12升到13,然后go mod 默认开启之后,这玩意似乎就消失不见了….得自己手动添加进环境变量。
1 | export PATH=$GOPATH/bin:PATH |
缺少使用方法
当我直接使用
1 | protoc --go_out=. *proto |
来生成go代码时,写到一半会发现只有Response
和Repuest
的结构体,而没有调用方法。
具体原因是我想生成grpc的代码,而没加上grpc的拓展….(我可真是傻逼)
1 | protoc --go_out=plugins=grpc:. *proto |
常用参数
这里是官方doc的一些小翻译
1 | protoc --go_out=plugins=grpc,import_path=mypackage:. *.proto |
如果需要对protoc进行扩展的话,以上是一条标准的示例。
paths=(import | source_relative)
- 声明生成文件的路径结构,默认为import
pluigins=plugin1+plugin2
- 声明需要加载的拓展。foo/bar.proto=quux/shme
- 加载grpc拓展时可以用到的,声明该foo/bar.proto
与go包quux/shme
有所联系,直接加载引用包到文件
以下这俩是废弃了的,不要使用
import_prefix=xxx
import_path=foo/bar