最近 在网上查看关于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