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