Proto DSL 참조
최소 예제
섹션 제목: “최소 예제”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;}go_package Convention
섹션 제목: “go_package Convention”option go_package = "./user"; // 예시입니다스칼라 타입
섹션 제목: “스칼라 타입”| Proto 타입 | Go 타입 |
|---|---|
string | string |
int32 | int32 |
int64 | int64 |
bool | bool |
float | float32 |
double | float64 |
bytes | []byte |
반복 필드(slice)
섹션 제목: “반복 필드(slice)”message ListUsersResponse { repeated UserInfo users = 1; int64 total = 2;}
message UserInfo { int64 id = 1; string name = 2;}중첩 메시지
섹션 제목: “중첩 메시지”message CreateOrderRequest { int64 user_id = 1; Address address = 2;}
message Address { string street = 1; string city = 2; string zip = 3;}열거형
섹션 제목: “열거형”enum UserStatus { ACTIVE = 0; INACTIVE = 1; BANNED = 2;}
message UserInfo { int64 id = 1; string name = 2; UserStatus status = 3;}여러 서비스
섹션 제목: “여러 서비스”goctl 생성합니다 separate zRPC 서비스 위한 각 service block. Keep one 서비스 별 .proto 파일.
Go 코드 생성
섹션 제목: “Go 코드 생성”# 사용 예시goctl rpc protoc user.proto \ --go_out=./user \ --go-grpc_out=./user \ --zrpc_out=.
# 또는 다음 방법 사용protoc user.proto \ --go_out=./user \ --go-grpc_out=./user명명 규칙
섹션 제목: “명명 규칙”| What | Convention | 예제 |
|---|---|---|
| Service name | PascalCase | UserService |
| RPC 메서드 | PascalCase | GetUserById |
| 메시지 name | PascalCase | GetUserRequest |
| 필드 name | snake_case | user_id |
| 패키지 name | lowercase | package user |