Go
Protobuf in Go
Recherche…
Introduction
Protobuf ou Protocol Buffer code et décode les données afin que différentes applications ou modules écrits dans des langages différents puissent échanger le grand nombre de messages rapidement et de manière fiable sans surcharger le canal de communication. Avec protobuf, la performance est directement proportionnelle au nombre de messages que vous avez tendance à envoyer. Il compresse le message pour l'envoyer dans un format binaire sérialisé en fournissant vos outils pour encoder le message à la source et le décoder à la destination.
Remarques
Il y a deux étapes d'utilisation de protobuf .
- Vous devez d'abord compiler les définitions de tampon de protocole
- Importez les définitions ci-dessus, avec la bibliothèque de support dans votre programme.
Prise en charge de gRPC
Si un fichier proto spécifie les services RPC, protoc-gen-go peut être chargé de générer du code compatible avec gRPC ( http://www.grpc.io/) . Pour ce faire, passez le paramètre plugins
à protoc-gen-go; la manière habituelle est de l'insérer dans l'argument --go_out pour protoc:
protoc --go_out=plugins=grpc:. *.proto
Utiliser Protobuf avec Go
Le message que vous souhaitez sérialiser et envoyer que vous pouvez inclure dans un fichier test.proto , contenant
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;
}
}
Pour compiler la définition du tampon de protocole, exécutez le protocole avec le paramètre --go_out défini dans le répertoire vers lequel vous voulez envoyer le code Go.
protoc --go_out=. *.proto
Pour créer et jouer avec un objet Test à partir du package exemple,
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.
}
Pour transmettre des paramètres supplémentaires au plug-in, utilisez une liste de paramètres séparés par des virgules, séparée du répertoire de sortie par deux points:
protoc --go_out=plugins=grpc,import_path=mypackage:. *.proto