Heim  >  Artikel  >  Backend-Entwicklung  >  Was ist Golang Gob?

Was ist Golang Gob?

青灯夜游
青灯夜游Original
2023-02-02 17:42:384166Durchsuche

gob ist ein Codierungs-/Decodierungstool für die Serialisierung von Datenstrukturen, das im Golang-Paket enthalten ist. Encoder wird zum Codieren und Decoder zum Decodieren verwendet. Gob verwendet die io.Writer-Schnittstelle, um über die Funktion NewEncoder() ein Encoder-Objekt zu erstellen, und ruft die Methode Encode() auf, um den Codierungsvorgang zu implementieren. Er verwendet die Schnittstelle io.Reader, um über die Funktion und Aufrufe von NewDecoder() ein Decoder-Objekt zu erstellen die Decode()-Methode, um den Dekodierungsvorgang abzuschließen.

Was ist Golang Gob?

Die Betriebsumgebung dieses Tutorials: Windows 7-System, GO Version 1.18, Dell G3-Computer.

 Gobs vollständiger Name lautet: Go Binary

 Golangs eigenes Codierungs-/Decodierungstool für die Serialisierung von Datenstrukturen, was bedeutet, dass Gob eine Datenstruktur in etwas serialisieren und diese auch deserialisieren kann! Wir werden uns später ansehen, was aus der Serialisierung wird. Ob daraus ein String oder ein Binärstrom wird, spielt keine Rolle. Die Funktion ist jedenfalls Serialisierung.

  Bei der Verwendung von Gob müssen wir auf die Objekte Encoder und Decoder achten. Wie der Name schon sagt, wird eines zum Codieren und das andere zum Decodieren verwendet. Schauen wir uns zunächst an, wie wir diese beiden Objekte erhalten

Was ist Golang Gob?

Was ist Golang Gob?

Es ist also klar, dass diese beiden Funktionen aufgerufen werden müssen, um die Encoder- und Decoder-Objekte zu erhalten. Beachten Sie, dass die Parameter hier die Schnittstellentypen io.Writer und io.Reader sind. Wir haben diese beiden Schnittstellen in der vorherigen Vorlesung vorgestellt, daher sind die hier erforderlichen Parameter Objekte, die die Schnittstellentypen io.Writer bzw. io.Reader implementieren.

 Encoder und Decoder haben jeweils eine Hauptmethode:

Was ist Golang Gob?

Was ist Golang Gob?

 Da wir hier sehen, können wir bereits die folgenden Schlussfolgerungen ziehen:

Gob verwendet die io.Writer-Schnittstelle und erstellt das Encoder-Objekt über die Funktion NewEncoder() Rufen Sie die Encode()-Methode auf, um den Codierungsvorgang zu implementieren. Verwenden Sie die io.Reader-Schnittstelle, um ein Decoder-Objekt über die NewDecoder()-Funktion zu erstellen, und rufen Sie die Decode()-Methode auf, um den Decodierungsvorgang abzuschließen!

Als nächstes versuchen wir, diesen Encoder und Decoder zu verwenden, um einfach mit gob zu beginnen. Schauen wir uns das erste Beispiel an.

Beispiel 1: Konvertierung zwischen Datenstruktur und Bytes.Buffer (in Byte-Slices codiert)

 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}

Beispiel 2 : Serialisierung und Deserialisierung der Datenstruktur in eine Datei

 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}
Die beiden oben genannten Beispiele sind nicht schwierig. Ich habe die Fehlerbehandlung und andere Codes entfernt, mein Bestes gegeben, um jeden Codeblock zu kommentieren, und ihn geduldig gelesen. Diese beiden Beispiele sollten sein in der Lage, die Essenz der Kodierung und Dekodierung von Gob zu verstehen.

Wenn Sie Gob für die Entwicklung verwenden müssen, basierend auf dem Verständnis, was Gob ist, wird empfohlen, die offizielle Dokumentation im Detail zu lesen, um weitere Details zu erfahren: https://golang.org/pkg/encoding/gob/

[ Verwandte Empfehlungen:

Go-Video-Tutorial, Programmierunterricht

Das obige ist der detaillierte Inhalt vonWas ist Golang Gob?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn