Maison  >  Article  >  développement back-end  >  Utilisation des tampons de protocole Google pour la sérialisation des données en langage Go

Utilisation des tampons de protocole Google pour la sérialisation des données en langage Go

WBOY
WBOYoriginal
2023-06-16 14:13:511976parcourir

Google Protocol Buffers (ci-après dénommé ProtoBuf) est un format de sérialisation de données léger et efficace qui est largement utilisé pour la transmission et le stockage de données dans les systèmes distribués. En tant que langage de programmation moderne, le langage Go est également très convivial pour prendre en charge ProtoBuf. Cet article explique comment utiliser ProtoBuf pour la sérialisation des données en langage Go.

1. Installez ProtoBuf

Avant de commencer à utiliser ProtoBuf, vous devez d'abord l'installer. Vous pouvez télécharger le package binaire correspondant au système d'exploitation sur le site officiel (https://developers.google.com/protocol-buffers/) pour l'installation, ou vous pouvez utiliser le gestionnaire de packages système pour l'installer (comme Ubuntu : sudo apt-get install protobuf-compiler ).

Une fois l'installation terminée, vous pouvez utiliser la commande suivante pour vérifier si l'installation a réussi :

$ protoc --version
libprotoc 3.6.1

2. Définissez le format du message

Avant d'utiliser ProtoBuf pour la sérialisation des données , vous devez définir le format du message . Dans ProtoBuf, le format du message est défini via des fichiers .proto. Par exemple, nous définissons un format de message nommé Person :

syntax = "proto3";

message Person {
string name = 1;
int32 age = 2;
chaîne répétée adresse = 3;
}

where syntaxe Spécifier la version de syntaxe utilisée par ProtoBuf, message définit un type de message et le nom, l'âge et l'adresse sont des champs du message. Les champs sont spécifiés par des identifiants numériques, qui doivent être uniques.

Il convient de noter que ProtoBuf prend en charge les types de messages imbriqués et qu'un type de message peut être défini comme un champ d'un autre type de message.

3. Compilez et générez du code Go

ProtoBuf doit compiler le fichier .proto en code dans le langage correspondant pour l'utiliser dans le programme. Dans le langage Go, vous pouvez utiliser le plug-in protoc-gen-go pour la compilation, ou vous pouvez utiliser le plug-in github.com/golang/protobuf/protoc-gen-go pour la compilation. Cet article prend la première méthode comme exemple à présenter.

Vous devez d'abord installer le plugin :

$ go get -u github.com/golang/protobuf/protoc-gen-go

Ensuite, utilisez la commande suivante pour compiler le fichier .proto :

$ protoc -- go_out=.*.proto

Cela générera un fichier Go nommé person.pb.go, qui contient la définition du type de message Person et les méthodes liées à la sérialisation et à la désérialisation.

4. Utilisez ProtoBuf pour la sérialisation des données

Il est très simple d'utiliser ProtoBuf pour la sérialisation des données dans le programme. En prenant le message Person comme exemple, nous pouvons utiliser le code suivant pour sérialiser un objet Person en données binaires :

package main

import (

"log"

"github.com/golang/protobuf/proto"

)

func main() {

p := &Person{
    Name:    "Tom",
    Age:     20,
    Address: []string{"Shanghai", "Beijing"},
}

data, err := proto.Marshal(p)
if err != nil {
    log.Fatal("marshaling error: ", err)
}

log.Println(data)

}

Dans le au-dessus du code, nous créons d'abord un objet Person p, puis appelons la méthode proto.Marshal pour le sérialiser en données binaires et l'imprimer. Notez que lorsque vous utilisez la méthode proto.Marshal, vous devez transmettre un pointeur vers l'objet Person.

5. Utilisez ProtoBuf pour la désérialisation des données

Semblable à la sérialisation des données, l'utilisation de ProtoBuf pour la désérialisation des données est également très simple. Nous pouvons utiliser le code suivant pour désérialiser les données binaires sérialisées dans un objet Person :

package main

import (

"log"

"github.com/golang/protobuf/proto"

)

func main() {

data := []byte{10, 3, 84, 111, 109, 16, 20, 26, 8, 83, 104, 97, 110, 103, 104, 97, 105, 18, 7, 66, 101, 105, 106, 105, 110, 103}

p := &Person{}
err := proto.Unmarshal(data, p)

if err != nil {
    log.Fatal("unmarshaling error: ", err)
}

log.Println(p)

}

Dans le code ci-dessus, nous définissons d'abord une donnée binaire, puis appelez la méthode proto.Unmarshal pour la désérialiser en un objet Person et l'imprimer.

6. Résumé

Dans cet article, nous avons présenté comment utiliser ProtoBuf pour la sérialisation des données en langage Go. Il est à noter que lors de l'utilisation de ProtoBuf pour la sérialisation et la désérialisation des données, le format du message doit être défini et compilé pour générer du code dans le langage correspondant. De plus, utiliser ProtoBuf pour la sérialisation et la désérialisation des données est très simple. Il vous suffit d'appeler la méthode correspondante pour terminer.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn