跳转到内容

go-zero 的 Proto 语法

go-zero 使用标准的 protobuf 3 语法来定义 RPC 服务。

syntax = "proto3";
package user;
option go_package = "./user";
service User {
rpc GetUser(GetUserRequest) returns (GetUserResponse);
rpc CreateUser(CreateUserRequest) returns (CreateUserResponse);
}
message GetUserRequest {
int64 id = 1;
}
message GetUserResponse {
int64 id = 1;
string name = 2;
}
message CreateUserRequest {
string name = 1;
string email = 2;
}
message CreateUserResponse {
int64 id = 1;
}

goctl 要求设置 option go_package,其值为生成的 Go 文件的相对输出路径:

option go_package = "./user"; // 生成到 ./user 目录
Proto 类型Go 类型
stringstring
int32int32
int64int64
boolbool
floatfloat32
doublefloat64
bytes[]byte
message ListUsersResponse {
repeated UserInfo users = 1;
int64 total = 2;
}
enum UserStatus {
ACTIVE = 0;
INACTIVE = 1;
BANNED = 2;
}
Terminal window
goctl rpc protoc user.proto \
--go_out=./user \
--go-grpc_out=./user \
--zrpc_out=.
内容规范示例
服务名PascalCaseUserService
RPC 方法PascalCaseGetUserById
消息名PascalCaseGetUserRequest
字段名snake_caseuser_id
包名小写package user

Hello World →