golang

golang,第1张

go protoc官方文档:https://developers.google.com/protocol-buffers/docs/gotutorial

当前目录生成/proto/helloworld.proto文件
syntax = "proto3";

package helloworld;

option go_package = "/proto";

service Greeter {
  rpc SauHello (HelloRequest) returns (HelloReply) {}
}

message HelloRequest {
  string name = 1;
}

message HelloReply {
  string message = 1;
}
命令
protoc -I=./proto --go_out=. ./proto/*

结果:
在/proto目录里生成了helloworld.pb.go文件
这里option go_package 定义了导入的路径/proto,而–go_out也定义了路径,所有最后令–go_out=.

命令介绍
protoc -I=$SRC_DIR --go_out=$DST_DIR $SRC_DIR/addressbook.proto

参数
-I:源文件的目录(可省略)
--go_out: 设置所生成的Go代码输出目录
最后一个参数表示源文件

grpc引起错误
proto文件中如果没有添加option go_package = "/proto";这行会报下面这种错误。

protoc-gen-go: unable to determine Go import path for "proto/helloworld.proto"

Please specify either:
        • a "go_package" option in the .proto source file, or
        • a "M" argument on the command line.

See https://developers.google.com/protocol-buffers/docs/reference/go-generated#package for more information.

--go_out: protoc-gen-go: Plugin failed with status code 1.

原因是protoc-gen-go的不同版本兼容性问题。

解决办法:
一是,在proto文件中加上option go_package = "/proto";
二是采用老版本的proto-gen-go,使用命令切换为v1.3.2版本 go get -u github.com/golang/protobuf/protoc-gen-go@v1.3.2

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/994462.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-21
下一篇 2022-05-21

发表评论

登录后才能评论

评论列表(0条)

保存