Maison  >  Article  >  développement back-end  >  Qu'est-ce que Golang Gob

Qu'est-ce que Golang Gob

青灯夜游
青灯夜游original
2023-02-02 17:42:384197parcourir

gob est un outil d'encodage/décodage pour la sérialisation de la structure de données fourni avec le package Golang. Encoder est utilisé pour l'encodage et Decoder est utilisé pour le décodage. Gob utilise l'interface io.Writer pour créer un objet Encoder via la fonction NewEncoder() et appelle la méthode Encode() pour implémenter l'opération d'encodage ; utilise l'interface io.Reader pour créer un objet Decoder via la fonction NewDecoder() et appelle. la méthode Decode() pour terminer l’opération de décodage.

Qu'est-ce que Golang Gob

L'environnement d'exploitation de ce tutoriel : système Windows 7, GO version 1.18, ordinateur Dell G3.

 le nom complet de gob est : Go Binary

 L'outil d'encodage/décodage de sérialisation de structure de données de Golang, ce qui signifie que gob peut sérialiser une structure de données en quelque chose, et peut également la désérialiser pour la modifier ! Nous verrons plus tard ce que devient la sérialisation. Qu'elle se transforme en chaîne ou en flux binaire, peu importe en quoi elle se transforme. Quoi qu'il en soit, la fonction est la sérialisation.

  Lors de l'utilisation de Gob, nous devons faire attention aux objets Encoder et Decoder, comme son nom l'indique, l'un est utilisé lors de l'encodage et l'autre lors du décodage. Voyons d'abord comment obtenir ces deux objets :

.

Quest-ce que Golang Gob

Quest-ce que Golang Gob

Il est donc clair que ces deux fonctions doivent être appelées pour obtenir les objets Encoder et Decoder. Notez que les paramètres ici sont les types d'interface io.Writer et io.Reader Nous avons présenté ces deux interfaces dans la leçon précédente, donc les paramètres requis ici sont des objets qui implémentent respectivement les types d'interface io.Writer et io.Reader.

 Encoder et Decoder ont chacun une méthode principale :

Quest-ce que Golang Gob

Quest-ce que Golang Gob

 En voyant ici, nous pouvons déjà tirer les conclusions suivantes :

Gob utilise l'interface io.Writer et crée l'objet Encoder via la fonction NewEncoder() .Appelez la méthode Encode() pour implémenter l'opération d'encodage ; utilisez l'interface io.Reader pour créer un objet Decoder via la fonction NewDecoder() et appelez la méthode Decode() pour terminer l'opération de décodage !

Ensuite, essayons d'utiliser cet encodeur et ce décodeur pour démarrer facilement avec gob. Regardons le premier exemple

Exemple 1 : Conversion entre la structure de données et les octets.Buffer (codé en tranches d'octets)

 1package main
 2
 3import (
 4    "bytes"
 5    "fmt"
 6    "encoding/gob"
 7    "io"
 8)
 9
10//准备编码的数据
11type P struct {
12    X, Y, Z int
13    Name    string
14}
15
16//接收解码结果的结构
17type Q struct {
18    X, Y *int32
19    Name string
20}
21
22func main() {
23    //初始化一个数据
24    data := P{3, 4, 5, "CloudGeek"}
25    //编码后得到buf字节切片
26    buf := encode(data)
27    //用于接收解码数据
28    var q *Q
29    //解码操作
30    q = decode(buf)
31    //"CloudGeek": {3,4}
32    fmt.Printf("%q: {%d,%d}\n", q.Name, *q.X, *q.Y)
33
34}
35
36func encode(data interface{}) *bytes.Buffer {
37    //Buffer类型实现了io.Writer接口
38    var buf bytes.Buffer
39    //得到编码器
40    enc := gob.NewEncoder(&buf)
41    //调用编码器的Encode方法来编码数据data
42    enc.Encode(data)
43    //编码后的结果放在buf中
44    return &buf
45}
46
47func decode(data interface{}) *Q {
48    d := data.(io.Reader)
49    //获取一个解码器,参数需要实现io.Reader接口
50    dec := gob.NewDecoder(d)
51    var q Q
52    //调用解码器的Decode方法将数据解码,用Q类型的q来接收
53    dec.Decode(&q)
54    return &q
55}

Exemple 2. : Sérialisation et désérialisation de la structure de données dans un fichier

 1package main
 2
 3import (
 4    "encoding/gob"
 5    "os"
 6    "fmt"
 7)
 8
 9//试验用的数据类型
10type Address struct {
11    City    string
12    Country string
13}
14
15//序列化后数据存放的路径
16var filePath string
17
18func main() {
19    filePath = "./address.gob"
20    encode()
21    pa := decode()
22    fmt.Println(*pa) //{Chengdu China}
23}
24
25//将数据序列号后写到文件中
26func encode() {
27    pa := &Address{"Chengdu", "China"}
28    //打开文件,不存在的时候新建
29    file, _ := os.OpenFile(filePath, os.O_CREATE|os.O_WRONLY, 0666)
30    defer file.Close()
31
32    //encode后写到这个文件中
33    enc := gob.NewEncoder(file)
34    enc.Encode(pa)
35}
36
37//从文件中读取数据并反序列化
38func decode() *Address {
39    file, _ := os.Open(filePath)
40    defer file.Close()
41
42    var pa Address
43    //decode操作
44    dec := gob.NewDecoder(file)
45    dec.Decode(&pa)
46    return &pa
47}

Les deux exemples ci-dessus ne sont pas difficiles. J'ai supprimé la gestion des erreurs et d'autres codes, j'ai fait de mon mieux pour commenter chaque bloc de code et je l'ai lu patiemment. Ces deux exemples devraient être capable de comprendre l'essence de l'encodage et du décodage de gob.

Sur la base de la compréhension de ce qu'est gob, si vous devez utiliser gob pour le développement, il est recommandé de lire la documentation officielle en détail pour en savoir plus : https://golang.org/pkg/encoding/gob/

[ Recommandations associées : Tutoriel vidéo Go, Enseignement de la programmation

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