91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Go內置序列化庫gob如何使用

發布時間:2023-04-28 17:57:20 來源:億速云 閱讀:98 作者:iii 欄目:開發技術

本篇內容介紹了“Go內置序列化庫gob如何使用”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

概述

Gob 是Go語言自己以二進制形式序列化和反序列化程序數據的格式,可以在 encoding 包中找到。這種格式的數據簡稱為 Gob(即 Go binary 的縮寫)。類似于 Python 的“pickle”和 Java 的“Serialization”。

Gob 和 JSON 的 pack 之類的方法一樣,由發送端使用 Encoder 對數據結構進行編碼。在接收端收到消息之后,接收端使用 Decoder 將序列化的數據變化成本地變量。

Gob典型應用就是在標準庫的net/rpc中。

gob庫是Go語言標準庫中的一部分,它用于將Go語言的數據類型序列化為字節流,或將字節流反序列化為Go語言的數據類型。gob庫支持的數據類型包括基本數據類型、結構體、數組、切片、映射、通道等。

gob庫的使用非常簡單,只需要調用Encode()函數將數據類型序列化為字節流,或調用Decode()函數將字節流反序列化為數據類型即可。除此之外,gob庫還支持注冊數據類型和自定義編解碼器。

gob庫的使用示例

下面通過幾個示例來演示gob庫的使用方法。

1. 序列化和反序列化基本數據類型

package main
import (
    "bytes"
    "encoding/gob"
    "fmt"
)
func main() {
    var buf bytes.Buffer
    // 序列化
    encoder := gob.NewEncoder(&buf)
    err := encoder.Encode(123)
    if err != nil {
        panic(err)
    }
    // 反序列化
    decoder := gob.NewDecoder(&buf)
    var i int
    err = decoder.Decode(&i)
    if err != nil {
        panic(err)
    }
    fmt.Println(i)
}

在上面的示例中,我們先創建了一個bytes.Buffer類型的變量buf,然后使用gob庫的NewEncoder()函數創建一個編碼器encoder,并將編碼器的輸出流設置為buf。接著,我們將整數123序列化為字節流,并將序列化結果保存在buf中。最后,我們使用gob庫的NewDecoder()函數創建一個解碼器decoder,并將解碼器的輸入流設置為buf。然后,我們使用decoder將序列化后的數據反序列化為整數,并將結果保存在變量i中。最后,我們打印出變量i的值,輸出為123。

2. 序列化和反序列化結構體

package main
import (
    "bytes"
    "encoding/gob"
    "fmt"
)
type Person struct {
    Name string
    Age  int
}
func main() {
    var buf bytes.Buffer
    // 序列化
    encoder := gob.NewEncoder(&buf)
    p := Person{Name: "Alice", Age: 20}
    err := encoder.Encode(p)
    if err != nil {
        panic(err)
    }
    // 反序列化
    decoder := gob.NewDecoder(&buf)
    var p2 Person
    err = decoder.Decode(&p2)
    if err != nil {
        panic(err)
    }
    fmt.Println(p2)
}

在上面的示例中,我們定義了一個結構體Person,它有兩個字段Name和Age。我們先創建了一個bytes.Buffer類型的變量buf,然后使用gob庫的NewEncoder()函數創建一個編碼器encoder,并將編碼器的輸出流設置為buf。接著,我們創建了一個Person類型的變量p,并將它序列化為字節流,并將序列化結果保存在buf中。最后,我們使用gob庫的NewDecoder()函數創建一個解碼器decoder,并將解碼器的輸入流設置為buf。然后,我們使用decoder將序列化后的數據反序列化為Person類型,并將結果保存在變量p2中。最后,我們打印出變量p2的值,輸出為{Alice 20}。

3. 注冊數據類型

在上面的示例中,我們將Person結構體序列化和反序列化時,需要使用NewEncoder()和NewDecoder()函數創建編碼器和解碼器。如果我們需要對同一種類型進行多次序列化和反序列化,這樣的做法就會非常麻煩。為了解決這個問題,gob庫提供了Register()函數,可以將一個數據類型注冊到gob庫中,這樣在序列化和反序列化時就可以直接使用編碼器和解碼器了。

下面是一個示例:

package main
import (
    "bytes"
    "encoding/gob"
    "fmt"
)
type Person struct {
    Name string
    Age  int
}
func main() {
    var buf bytes.Buffer
    // 注冊數據類型
    gob.Register(Person{})
    // 序列化
    encoder := gob.NewEncoder(&buf)
    p := Person{Name: "Alice", Age: 20}
    err := encoder.Encode(p)
    if err != nil {
        panic(err)
    }
    // 反序列化
    decoder := gob.NewDecoder(&buf)
    var p2 Person
    err = decoder.Decode(&p2)
    if err != nil {
        panic(err)
    }
    fmt.Println(p2)
}

在上面的示例中,我們使用gob庫的Register()函數將Person結構體注冊到gob庫中。接著,我們就可以在序列化和反序列化時直接使用編碼器和解碼器了。

“Go內置序列化庫gob如何使用”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

长阳| 婺源县| 尤溪县| 远安县| 云梦县| 卢湾区| 奇台县| 黄梅县| 防城港市| 宁化县| 凭祥市| 大厂| 额尔古纳市| 边坝县| 偃师市| 大冶市| 重庆市| 历史| 吴桥县| 长治市| 陆良县| 葵青区| 冀州市| 巩留县| 南投县| 洛川县| 仁寿县| 邵武市| 玛纳斯县| 江川县| 甘孜县| 濮阳市| 定州市| 焦作市| 江孜县| 通许县| 武功县| 砀山县| 鹤庆县| 油尖旺区| 永兴县|