Sök…


Introduktion

Protobuf- eller Protocol Buffer kodar och avkodar data så att olika applikationer eller moduler skrivna på olika sätt kan utbyta det stora antalet meddelanden snabbt och pålitligt utan att överbelasta kommunikationskanalen. Med protobuf är prestandan direkt proportionell mot antalet meddelanden du tenderar att skicka. Det komprimerar meddelandet för att skicka i ett seriellt binärt format genom att ge dina verktyg för att koda meddelandet vid källan och avkoda det vid destinationen.

Anmärkningar

Det finns två steg för att använda protobuf .

  1. Först måste du sammanställa protokollbuffertdefinitionerna
  2. Importera definitionerna ovan med supportbiblioteket i ditt program.

gRPC-stöd

Om en proto-fil specificerar RPC-tjänster kan protoc-gen-go instrueras att generera kod kompatibel med gRPC ( http://www.grpc.io/) . För att göra detta, passera plugins parameter till protoc-gen-go; det vanliga sättet är att infoga det i protokollet --go_out till protokoll:

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

Använda Protobuf med Go

Meddelandet du vill serialisera och skicka som du kan inkludera i en fil test.proto , som innehåller

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

För att sammanställa protokollbuffertdefinitionen, kör protokoll med --go_out-parametern inställd på katalogen du vill mata ut Go-koden till.

protoc --go_out=. *.proto

För att skapa och spela med ett testobjekt från exempelpaketet,

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

För att skicka extra parametrar till pluginprogrammet använder du en kommaseparerad parameterlista separerad från utgångskatalogen med en kolon:

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


Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow