수색…


소개

Protobuf 또는 프로토콜 버퍼는 데이터를 인코딩 및 디코딩하므로 서로 다른 언어로 작성된 서로 다른 응용 프로그램이나 모듈이 통신 채널에 과부하가 발생하지 않고도 빠르고 안정적으로 많은 수의 메시지를 교환 할 수 있습니다. protobuf를 사용하면 성능은 전송하려는 메시지의 수에 직접 비례합니다. 소스에서 메시지를 인코딩하고 목적지에서 디코딩 할 도구를 제공하여 직렬화 된 바이너리 형식으로 메시지를 압축합니다.

비고

protobuf 를 사용하는 두 단계가 있습니다.

  1. 먼저 프로토콜 버퍼 정의를 컴파일해야합니다.
  2. 지원 라이브러리를 사용하여 위의 정의를 프로그램으로 가져옵니다.

gRPC 지원

proto 파일이 RPC 서비스를 지정하면 protoc-gen-go는 gRPC와 호환되는 코드를 생성하도록 지시받을 수 있습니다 ( http://www.grpc.io/) . 이렇게하려면 protins-gen-go에 plugins 매개 변수를 전달하십시오. 일반적인 방법은 그것을 protoc에 대한 --go_out 인수에 삽입하는 것입니다.

protoc --go_out=plugins=grpc:. *.proto

Protobuf와 Go 사용하기

serialize하고 보내려는 메시지는 test.proto 파일에 포함 할 수 있습니다.

package example;

enum FOO { X = 17; };

message Test {
  required string label = 1;
  optional int32 type = 2 [default=77];
  repeated int64 reps = 3;
  optional group OptionalGroup = 4 {
    required string RequiredField = 5;
  }
}

프로토콜 버퍼 정의를 컴파일하려면 Go 코드를 출력 할 디렉토리로 설정된 --go_out 매개 변수로 protoc를 실행하십시오.

protoc --go_out=. *.proto

예제 패키지의 Test 객체로 만들고 재생하려면,

package main

import (
    "log"

    "github.com/golang/protobuf/proto"
    "path/to/example"
)

func main() {
    test := &example.Test {
        Label: proto.String("hello"),
        Type:  proto.Int32(17),
        Reps:  []int64{1, 2, 3},
        Optionalgroup: &example.Test_OptionalGroup {
            RequiredField: proto.String("good bye"),
        },
    }
    data, err := proto.Marshal(test)
    if err != nil {
        log.Fatal("marshaling error: ", err)
    }
    newTest := &example.Test{}
    err = proto.Unmarshal(data, newTest)
    if err != nil {
        log.Fatal("unmarshaling error: ", err)
    }
    // Now test and newTest contain the same data.
    if test.GetLabel() != newTest.GetLabel() {
        log.Fatalf("data mismatch %q != %q", test.GetLabel(), newTest.GetLabel())
    }
    // etc.
}

추가 매개 변수를 플러그인에 전달하려면 출력 디렉토리에서 콜론으로 구분 된 쉼표로 구분 된 매개 변수 목록을 사용하십시오.

protoc --go_out=plugins=grpc,import_path=mypackage:. *.proto


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow