1. protocol buffer

구조를 가진 데이터에 대한 표현을 최소화 할 목적으로, 해당 data를 serializing하는 과정을 제공하는 IDL

(IDL is Interface Description Language)

 

2. 데이터 타입

IDL 정의시 사용할수 있는 데이터 타입은 아래와 같음

1) 기본타입

Protobuf C++ Java Python Go
double double double float *float64
int32 int32 int int *int32
int64 int64 long long *int64
uint32 uint32 int int *uint32
uint64 uint64 long long *uint64
sint32 int32 int int *int32
sint64 int64 long long *int64
fixed32 uint32 int int *uint32
fixed64 uint64 long long *uint64
sfixed32 int32 int int *int32
sfixed64 int64 long long *int64
bool bool boolean bool *bool
string string String unicode *string
bytes string ByteString str []byte

2) Nested types

syntax = "proto3";

mesage Car {

    message engine {

         string name = 1;

         int64  cc = 2;

    }

    string model = 1;

    string company = 2;

    int64  price = 3;

}

 

message test {

    repeated Car.engine  eng = 1;

    repeated Car  c = 2;

}

 

3) maps

syntax = "proto3";

 

message Company {

    message Dept {

         string description = 1;

         string location = 2;

    }

    map <string, Dept> depts = 1;

}

 

4) enums

message Car {

    enum CarType {

        sm3 = 0;

        sm5 = 1;

        sm7 = 2; 

    }

    CarType  ct = 1;

}

 

3. services

grpc에서 제공하는 rpc 서비스 기술

test.proto

=======================

syntax = "proto3";

 

service Test {

     rpc GetCar(GetCarRequest)  returns (GetCarResponse);

}

 

4. import other file

syntax = "proto3";

 

message Test {

    string t1 = 1;

    string t2 = 2;

}

 

main.proto

========================

syntax = "proto3";

import  public "test.proto";

 

message Main {

    repeated  Test t1 = 1;

}

 

5. protobuf compile

1) c++

protoc -I=$SRC_DIR --cpp_out=$DST_DIR  $SRC_DIR/test.proto

 

2) c

protoc -I=$SRC_DIR --csharp_out=$DST_DIR  $SRC_DIR/test.proto

 

3) go

go get golang.org/x/sys/unix

go get -u github.com/golang/protobuf/protoc-gen-go

 

protoc -I=$SRC_DIR --go_out=$DST_DIR  $SRC_DIR/test.proto

 

4) java

protoc -I=$SRC_DIR --java_out=$DST_DIR  $SRC_DIR/test.proto

 

5) python

protoc -I=$SRC_DIR --python_out=$DST_DIR  $SRC_DIR/test.proto

'Language > go' 카테고리의 다른 글

cobra  (0) 2020.12.16
viper  (0) 2020.12.16
regexp 코드  (0) 2018.03.15
json 코드  (0) 2018.03.15
http client 코드  (0) 2018.03.15

+ Recent posts