亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

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

咸阳市| 灵山县| 兰考县| 旬邑县| 迭部县| 陆川县| 凯里市| 永城市| 灵丘县| 吴堡县| 本溪市| 名山县| 呼伦贝尔市| 定陶县| 杂多县| 建平县| 永胜县| 玛曲县| 满城县| 泗洪县| 定陶县| 营山县| 道孚县| 澄江县| 华池县| 若尔盖县| 汽车| 黄骅市| 台北县| 尼玛县| 孝昌县| 临漳县| 宁蒗| 会泽县| 宁陵县| 黄山市| 新乐市| 鹤山市| 蒙城县| 彭山县| 天水市|