中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

golang Gob怎么使用

發布時間:2023-02-03 09:51:21 來源:億速云 閱讀:135 作者:iii 欄目:編程語言

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

gob是Golang包自帶的一個數據結構序列化的編碼/解碼工具,編碼使用Encoder,解碼使用Decoder。Gob使用io.Writer 接口,通過NewEncoder()函數創建Encoder對象通過調用Encode()方法實現編碼操作;使用io.Reader接口,通過NewDecoder()函數創建Decoder對象并調用Decode()方法完成解碼操作。

  gob全稱為:Go binary

  Golang自帶的一個數據結構序列化編碼/解碼工具,也就是說gob可以講go中的一個數據結構序列化成某種東西,還能反序列化!序列化成啥我們后面來看,不管是變成一個字符串,變成二進制流,變成啥先不管,反正作用就是序列化。

  Gob使用時我們需要關注Encoder和Decoder對象,顧名思義,一個是編碼的時候用的,一個是解碼的時候用的,我們看一下怎么獲取這兩個對象先:

golang Gob怎么使用

golang Gob怎么使用

  所以很明確,需要調用這兩個函數來獲取Encoder和Decoder對象。注意這里的參數是io.Writer和io.Reader接口類型,我們在上一講介紹過這兩個接口,所以這里需要的參數分別是實現了io.Writer和io.Reader接口類型的對象即可。

  Encoder和Decoder分別有一個主要的方法是:

golang Gob怎么使用

golang Gob怎么使用

  看到這里我們已經可以得到如下結論:

  Gob 使用 io.Writer 接口,通過 NewEncoder() 函數創建 Encoder 對象通過調用 Encode()方法實現編碼操作;使用 io.Reader 接口,通過 NewDecoder() 函數創建 Decoder 對象并調用 Decode()方法完成解碼操作!

  接下來我們試著用一下這個Encoder和Decoder,就輕輕松松入門gob了,來看第一個例子

  例1:數據結構與bytes.Buffer之間的轉換(編碼成字節切片)

 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}

  例2:數據結構到文件的序列化和反序列化

 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}

  上面2個例子都不難,我去掉了錯誤處理之類的代碼,盡量注釋了每塊代碼,耐心看完這2個例子應該就能體會gob的encode和decode精髓了。

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

向AI問一下細節

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

AI

大厂| 天台县| 都匀市| 北海市| 平和县| 新晃| 葫芦岛市| 揭阳市| 沁水县| 班戈县| 同江市| 延长县| 彩票| 利辛县| 梁平县| 葵青区| 时尚| 丹东市| 静安区| 巩义市| 咸宁市| 韶关市| 十堰市| 内乡县| 海盐县| 界首市| 盘山县| 边坝县| 永城市| 崇文区| 沐川县| 额济纳旗| 神木县| 灵宝市| 台东市| 泊头市| 雷山县| 保德县| 中牟县| 琼结县| 开鲁县|