Buscar..


Introducción

Protobuf o Protocol Buffer codifica y decodifica datos para que diferentes aplicaciones o módulos escritos en idiomas diferentes puedan intercambiar la gran cantidad de mensajes de forma rápida y confiable sin sobrecargar el canal de comunicación. Con protobuf, el rendimiento es directamente proporcional al número de mensajes que tiende a enviar. Comprime el mensaje para enviarlo en un formato binario serializado al proporcionarle las herramientas para codificar el mensaje en el origen y decodificarlo en el destino.

Observaciones

Hay dos pasos de usar protobuf .

  1. Primero debes compilar las definiciones del buffer de protocolo.
  2. Importe las definiciones anteriores, con la biblioteca de soporte en su programa.

soporte gRPC

Si un archivo de proto especifica servicios RPC, se puede indicar a protoc-gen-go que genere un código compatible con gRPC ( http://www.grpc.io/) . Para hacer esto, pasa el parámetro de plugins a protoc-gen-go; la forma habitual es insertarlo en el argumento --go_out para protoc:

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

Usando Protobuf con Go

El mensaje que desea serializar y enviar que puede incluir en un archivo test.proto , que contiene

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

Para compilar la definición del búfer de protocolo, ejecute protoc con el parámetro --go_out configurado en el directorio al que desea enviar el código Go.

protoc --go_out=. *.proto

Para crear y jugar con un objeto de prueba del paquete de ejemplo,

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

Para pasar parámetros adicionales al complemento, use una lista de parámetros separados por comas separados del directorio de salida por dos puntos:

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


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow