真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

golangGob怎么使用

本篇內(nèi)容介紹了“golang Gob怎么使用”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

成都創(chuàng)新互聯(lián)公司是一家專(zhuān)注于網(wǎng)站設(shè)計(jì)制作、成都做網(wǎng)站與策劃設(shè)計(jì),蟠龍網(wǎng)站建設(shè)哪家好?成都創(chuàng)新互聯(lián)公司做網(wǎng)站,專(zhuān)注于網(wǎng)站建設(shè)10多年,網(wǎng)設(shè)計(jì)領(lǐng)域的專(zhuān)業(yè)建站公司;建站業(yè)務(wù)涵蓋:蟠龍等地區(qū)。蟠龍做網(wǎng)站價(jià)格咨詢(xún):18980820575

gob是Golang包自帶的一個(gè)數(shù)據(jù)結(jié)構(gòu)序列化的編碼/解碼工具,編碼使用Encoder,解碼使用Decoder。Gob使用io.Writer 接口,通過(guò)NewEncoder()函數(shù)創(chuàng)建Encoder對(duì)象通過(guò)調(diào)用Encode()方法實(shí)現(xiàn)編碼操作;使用io.Reader接口,通過(guò)NewDecoder()函數(shù)創(chuàng)建Decoder對(duì)象并調(diào)用Decode()方法完成解碼操作。

gob全稱(chēng)為:Go binary

Golang自帶的一個(gè)數(shù)據(jù)結(jié)構(gòu)序列化編碼/解碼工具,也就是說(shuō)gob可以講go中的一個(gè)數(shù)據(jù)結(jié)構(gòu)序列化成某種東西,還能反序列化!序列化成啥我們后面來(lái)看,不管是變成一個(gè)字符串,變成二進(jìn)制流,變成啥先不管,反正作用就是序列化。

Gob使用時(shí)我們需要關(guān)注Encoder和Decoder對(duì)象,顧名思義,一個(gè)是編碼的時(shí)候用的,一個(gè)是解碼的時(shí)候用的,我們看一下怎么獲取這兩個(gè)對(duì)象先:

golang Gob怎么使用

golang Gob怎么使用

所以很明確,需要調(diào)用這兩個(gè)函數(shù)來(lái)獲取Encoder和Decoder對(duì)象。注意這里的參數(shù)是io.Writer和io.Reader接口類(lèi)型,我們?cè)谏弦恢v介紹過(guò)這兩個(gè)接口,所以這里需要的參數(shù)分別是實(shí)現(xiàn)了io.Writer和io.Reader接口類(lèi)型的對(duì)象即可。

Encoder和Decoder分別有一個(gè)主要的方法是:

golang Gob怎么使用

golang Gob怎么使用

看到這里我們已經(jīng)可以得到如下結(jié)論:

  Gob 使用 io.Writer 接口,通過(guò) NewEncoder() 函數(shù)創(chuàng)建 Encoder 對(duì)象通過(guò)調(diào)用 Encode()方法實(shí)現(xiàn)編碼操作;使用 io.Reader 接口,通過(guò) NewDecoder() 函數(shù)創(chuàng)建 Decoder 對(duì)象并調(diào)用 Decode()方法完成解碼操作!

接下來(lái)我們?cè)囍靡幌逻@個(gè)Encoder和Decoder,就輕輕松松入門(mén)gob了,來(lái)看第一個(gè)例子

例1:數(shù)據(jù)結(jié)構(gòu)與bytes.Buffer之間的轉(zhuǎn)換(編碼成字節(jié)切片)

 1package main
 2
 3import (
 4    "bytes"
 5    "fmt"
 6    "encoding/gob"
 7    "io"
 8)
 9
10//準(zhǔn)備編碼的數(shù)據(jù)
11type P struct {
12    X, Y, Z int
13    Name    string
14}
15
16//接收解碼結(jié)果的結(jié)構(gòu)
17type Q struct {
18    X, Y *int32
19    Name string
20}
21
22func main() {
23    //初始化一個(gè)數(shù)據(jù)
24    data := P{3, 4, 5, "CloudGeek"}
25    //編碼后得到buf字節(jié)切片
26    buf := encode(data)
27    //用于接收解碼數(shù)據(jù)
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類(lèi)型實(shí)現(xiàn)了io.Writer接口
38    var buf bytes.Buffer
39    //得到編碼器
40    enc := gob.NewEncoder(&buf)
41    //調(diào)用編碼器的Encode方法來(lái)編碼數(shù)據(jù)data
42    enc.Encode(data)
43    //編碼后的結(jié)果放在buf中
44    return &buf
45}
46
47func decode(data interface{}) *Q {
48    d := data.(io.Reader)
49    //獲取一個(gè)解碼器,參數(shù)需要實(shí)現(xiàn)io.Reader接口
50    dec := gob.NewDecoder(d)
51    var q Q
52    //調(diào)用解碼器的Decode方法將數(shù)據(jù)解碼,用Q類(lèi)型的q來(lái)接收
53    dec.Decode(&q)
54    return &q
55}

例2:數(shù)據(jù)結(jié)構(gòu)到文件的序列化和反序列化

 1package main
2
3import (
4    "encoding/gob"
5    "os"
6    "fmt"
7)
8
9//試驗(yàn)用的數(shù)據(jù)類(lèi)型
10type Address struct {
11    City    string
12    Country string
13}
14
15//序列化后數(shù)據(jù)存放的路徑
16var filePath string
17
18func main() {
19    filePath = "./address.gob"
20    encode()
21    pa := decode()
22    fmt.Println(*pa) //{Chengdu China}
23}
24
25//將數(shù)據(jù)序列號(hào)后寫(xiě)到文件中
26func encode() {
27    pa := &Address{"Chengdu", "China"}
28    //打開(kāi)文件,不存在的時(shí)候新建
29    file, _ := os.OpenFile(filePath, os.O_CREATE|os.O_WRONLY, 0666)
30    defer file.Close()
31
32    //encode后寫(xiě)到這個(gè)文件中
33    enc := gob.NewEncoder(file)
34    enc.Encode(pa)
35}
36
37//從文件中讀取數(shù)據(jù)并反序列化
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個(gè)例子都不難,我去掉了錯(cuò)誤處理之類(lèi)的代碼,盡量注釋了每塊代碼,耐心看完這2個(gè)例子應(yīng)該就能體會(huì)gob的encode和decode精髓了。

“golang Gob怎么使用”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!


網(wǎng)頁(yè)標(biāo)題:golangGob怎么使用
本文地址:http://weahome.cn/article/pechps.html

其他資訊

在線(xiàn)咨詢(xún)

微信咨詢(xún)

電話(huà)咨詢(xún)

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部