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.
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 :
.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 :
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!