Zoeken…


Invoering

Protobuf of Protocol Buffer codeert en decodeert gegevens zodat verschillende toepassingen of modules die in ongelijke talen zijn geschreven, het grote aantal berichten snel en betrouwbaar kunnen uitwisselen zonder het communicatiekanaal te overbelasten. Met protobuf zijn de prestaties recht evenredig met het aantal berichten dat u wilt verzenden. Het comprimeert het bericht om een serieel binair formaat te verzenden door uw de tools te bieden om het bericht bij de bron te coderen en op de bestemming te decoderen.

Opmerkingen

Er zijn twee stappen voor het gebruik van protobuf .

  1. Eerst moet u de protocolbufferdefinities compileren
  2. Importeer de bovenstaande definities, met de ondersteuningsbibliotheek, in uw programma.

gRPC-ondersteuning

Als een proto-bestand RPC-services specificeert, kan protoc-gen-go worden geïnstrueerd om code te genereren die compatibel is met gRPC ( http://www.grpc.io/) . Geef hiervoor de parameter plugins aan protoc-gen-go; de gebruikelijke manier is om het in te voegen in het argument --go_out om te protoceren:

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

Protobuf gebruiken met Go

Het bericht dat u wilt serialiseren en verzenden dat u kunt opnemen in een bestand test.proto , met daarin

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;
  }
}

Om de protocolbufferdefinitie te compileren, voert u protoc uit met de parameter --go_out ingesteld op de map waarnaar u de Go-code wilt uitvoeren.

protoc --go_out=. *.proto

Als u een testobject uit het voorbeeldpakket wilt maken en ermee wilt spelen,

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.
}

Om extra parameters aan de plug-in door te geven, gebruikt u een door komma's gescheiden parameterlijst gescheiden van de uitvoermap door een dubbele punt:

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


Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow