Go
Protobuf in Go
수색…
소개
Protobuf 또는 프로토콜 버퍼는 데이터를 인코딩 및 디코딩하므로 서로 다른 언어로 작성된 서로 다른 응용 프로그램이나 모듈이 통신 채널에 과부하가 발생하지 않고도 빠르고 안정적으로 많은 수의 메시지를 교환 할 수 있습니다. protobuf를 사용하면 성능은 전송하려는 메시지의 수에 직접 비례합니다. 소스에서 메시지를 인코딩하고 목적지에서 디코딩 할 도구를 제공하여 직렬화 된 바이너리 형식으로 메시지를 압축합니다.
비고
protobuf 를 사용하는 두 단계가 있습니다.
- 먼저 프로토콜 버퍼 정의를 컴파일해야합니다.
- 지원 라이브러리를 사용하여 위의 정의를 프로그램으로 가져옵니다.
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