目录
- protobuf官方文档参考:http://developers.google.com/protocol-buffers/docs/proto3
一、proto的类型
- proto的默认数值类型:当一个消息被解析的时候,如果被编码的信息不包含一个特定的singular元素,被解析的对象锁对应的域被设置为一个默认值,对于不同类型指定如下
- 对于strings,默认值是一个空string
- 对于bytes,默认值是一个空的bytes
- 对于bools,默认值是false
- 对于数值类型,默认是0
- 对于枚举,默认是第一个定义的枚举值,必须为0


二、option go_package
-
我们之前在stream.proto中配置的包路径为:
option go_package = ".;proto";,这时候生成的proto文件路径是跟stream.proto同级目录下- 对应的生成命令是:
protoc --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative *.proto

- 对应的生成命令是:
-
这时候思考,如果我们希望将pb.go生成到其他路径:
- 修改option go_package配置:
option go_package = "common/stream/proto/v1"; - 生成命令:注意这时候不应该再使用source_relative,而应该使用import,如
protoc --go_out=. --go_opt=paths=import --go-grpc_out=. --go-grpc_opt=paths=import *.proto

- 修改option go_package配置:
-
如果我们希望生成到根目录的其他路径
- 修改option go_package配置:
option go_package = "../../common/stream/proto/v1"; - 生成命令:注意这时候不应该再使用source_relative,而应该使用import,如
protoc --go_out=. --go_opt=paths=import --go-grpc_out=. --go-grpc_opt=paths=import *.proto

- 修改option go_package配置:
三、proto文件import另外一个文件的message
- hello.proto
syntax = "proto3";
import "base.proto";
option go_package = ".;proto";
service Greeter {
rpc SayHello (HelloRequest) returns (HelloReply);
rpc Ping(Empty) returns (Pong);
}
message HelloRequest {
string name = 1;
}
message HelloReply {
string message = 1;
}
- base.proto:比较公用的message
syntax = "proto3";
message Empty{
}
message Pong{
}
- 实际上谷歌已经自定义了Empty:而且还包含很多其他的内置message

- 修改后的proto:注意需要在golang中修改导入的位置,如图
//////////////////////////////////////////hello.proto
syntax = "proto3";
import "base.proto";
import "google/protobuf/empty.proto";
option go_package = ".;proto";
service Greeter {
rpc SayHello (HelloRequest) returns (HelloReply)</

最低0.47元/天 解锁文章
3470

被折叠的 条评论
为什么被折叠?



