Ricerca…


introduzione

Protobuf o Protocol Buffer codifica e decodifica i dati in modo che diverse applicazioni o moduli scritti in lingue diverse possano scambiare il gran numero di messaggi in modo rapido e affidabile senza sovraccaricare il canale di comunicazione. Con protobuf, la performance è direttamente proporzionale al numero di messaggi che si tende ad inviare. Comprime il messaggio per inviare un formato binario serializzato fornendo gli strumenti per codificare il messaggio all'origine e decodificarlo alla destinazione.

Osservazioni

Ci sono due passaggi per usare protobuf .

  1. Per prima cosa devi compilare le definizioni del buffer del protocollo
  2. Importa le definizioni di cui sopra, con la libreria di supporto nel tuo programma.

Supporto gRPC

Se un file di proto specifica i servizi RPC, è possibile istruire protoc-gen-go per generare codice compatibile con gRPC ( http://www.grpc.io/) . Per fare ciò, passa il parametro plugins a protoc-gen-go; il solito modo è di inserirlo nell'argomento --go_out per proteggere:

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

Usare Protobuf con Go

Il messaggio che si desidera serializzare e inviare che è possibile includere in un file test.proto , contenente

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

Per compilare la definizione del buffer del protocollo, eseguire protoc con il parametro --go_out impostato sulla directory a cui si desidera inviare il codice Go.

protoc --go_out=. *.proto

Per creare e giocare con un oggetto Test dal pacchetto di esempio,

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

Per passare parametri extra al plug-in, utilizzare un elenco di parametri separati da virgole separati dalla directory di output di due punti:

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


Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow