最近 在网上查看关于proto文件编译为golang代码的文章,发现遇到的问题好多都是文件目录不对,参数不对的情况,这里主要解决,使用 不同版本的proto-gen-go 参数不一样和找不到文件问题
安装protoc-gen-go
google.golang.org仓库版本
- 此版本需要再安装个protoc-gen-go-grpc,对标--go-grpc_out参数
go install google.golang.org/protobuf/cmd/protoc-gen-go@latest
go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest
//编译文件写法
protoc -I=$SRC_DIR   --go_out=$DST_DIR --go-grpc_out=$DST_DIR $SRC_DIR/*.proto
github.com/golang/protobuf仓库版本
go install github.com/golang/protobuf/protoc-gen-go@latest
//编译文件
protoc --go_out=plugins=grpc:$DST_DIR -I=$SRC_DIR $SRC_DIR/*.proto
两版都可以使用
解析参数
- -I等于- --proto_path,表示要编译的proto文件的路径和import引入的文件路径
- --go_out表示编译的golang文件所在目录- *.pb.go
- --go-grpc_out表示编译golang的rpc服务代码文件所在目录,文件后缀为- *_grpc.pb.go
- --go_out=plugins=grpc:$DST_DIR表示生成的golang代码文件里包含grpc服务代码,文件后缀为- *.pb.go
常见错误解决
- *.proto文件找不到,主要原因是- -I指定的目录 和- import引入的文件路径何在一起为文件真实目录
  
 项目目录:- /grpc_study/
 go_package参数:表示编译后文件的所在的位置,和- $DST_DIR关联着
 mathv3.proto目录:- /grpc_study/proto/
 mathv2.proto目录:- /grpc_study/proto/
 annotations.proto目录:- grpc_study/third_party/google/api/
 执行 编译时所在目录:- /grpc_study/
 编译命令:
protoc \
	-I "third_party/" \
	-I "proto" \
	--grpc-gateway_out=logtostderr=true:. \
	--go_out=plugins=grpc:. \
	./proto/mathv3.proto
实例完整代码 grpc_study



















