grpc折腾笔记(1)

最近公司准备整项目,需要用到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代码时,写到一半会发现只有ResponseRepuest的结构体,而没有调用方法。

具体原因是我想生成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