protobuf语法
- 指定版本
syntax = "proto3",需要双引号
- 指定包名
package proto,不需要双引号
- 除了
service,message,enum之外,其他语句都需要以;结束
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| syntax = "proto3";
package proto;
service Hello { rpc SayHello(HelloRequest) returns (HelloReply) {} }
message HelloRequest { string name = 1; repeated subjects = 2; }
message HelloReply { string message = 1; }
|
repeated表示可以出现0次或多次,go语言中用数组表示
Map类型
1 2 3
| map<key_type, value_type> map_field = N; message Project {...} map<string, Project> projects = 1;
|
HttpRule
一个rpc可以映射到一个或多个http方法,使用google.api.http注释来表示该映射
1 2 3 4 5 6
| rpc Put(PutRequest) returns (PutResponse) { option (google.api.http) = { post: "/v3/kv/put" body: "*" }; }
|
可以使用additional_bindings选项为一个rpc定义多个http方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| service Messaging { rpc GetMessage(GetMessageRequest) returns (Message) { option (google.api.http) = { get: "/v1/messages/{message_id}" additional_bindings { get: "/v1/users/{user_id}/messages/{message_id}" } }; } } message GetMessageRequest { string message_id = 1; string user_id = 2; }
|
编译生成.pb.go文件:
1 2 3
|
protoc -I . --go_out=plugins=grpc:. ./hello.proto
|