Suche…


Einführung

Protobuf oder Protocol Buffer codiert und decodiert Daten, so dass verschiedene Anwendungen oder Module, die in anderen Sprachen geschrieben sind, die große Anzahl von Nachrichten schnell und zuverlässig austauschen können, ohne den Kommunikationskanal zu überlasten. Mit protobuf ist die Leistung direkt proportional zur Anzahl der Nachrichten, die Sie normalerweise senden. Es komprimiert die Nachricht, um sie in einem serialisierten Binärformat zu senden, indem sie die Tools bereitstellt, um die Nachricht an der Quelle zu codieren und sie am Ziel zu decodieren.

Bemerkungen

Es gibt zwei Schritte zur Verwendung von Protobuf .

  1. Zuerst müssen Sie die Protokollpufferdefinitionen kompilieren
  2. Importieren Sie die obigen Definitionen mit der Support-Bibliothek in Ihr Programm.

gRPC-Unterstützung

Wenn eine Protodatei RPC-Dienste angibt, kann protoc-gen-go angewiesen werden, mit gRPC ( http://www.grpc.io/) kompatiblen Code zu erzeugen. Übergeben Sie dazu den Parameter plugins an protoc-gen-go; Der übliche Weg ist, ihn in das Argument --go_out des Protokolls einzufügen:

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

Protobuf mit Go verwenden

Die Nachricht, die Sie serialisieren und senden möchten, die Sie in eine Datei test.proto einfügen können , die Folgendes enthält:

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

Um die Protokollpufferdefinition zu kompilieren, führen Sie protoc mit dem Parameter --go_out auf das Verzeichnis aus, in das Sie den Go-Code ausgeben möchten.

protoc --go_out=. *.proto

So erstellen und spielen Sie ein Testobjekt aus dem Beispielpaket

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

Um zusätzliche Parameter an das Plugin zu übergeben, verwenden Sie eine durch Kommas getrennte Parameterliste, die durch einen Doppelpunkt vom Ausgabeverzeichnis getrennt ist:

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


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow