最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

golang中g(shù)ob的實(shí)現(xiàn)示例

 更新時(shí)間:2025年11月14日 11:24:45   作者:盼盼編程  
本文介紹了Go語言的Gob格式,它是Go以二進(jìn)制形式序列化和反序列化程序數(shù)據(jù)的格式,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

Gob 是 Go 自己的以二進(jìn)制形式序列化和反序列化程序數(shù)據(jù)的格式;可以在 encoding 包中找到。這種格式的數(shù)據(jù)簡稱為 Gob (即 Go binary 的縮寫)。類似于 Python 的 "pickle" 和 Java 的 "Serialization"。

Gob 通常用于遠(yuǎn)程方法調(diào)用(RPCs,參見 15.9 的 rpc 包)參數(shù)和結(jié)果的傳輸,以及應(yīng)用程序和機(jī)器之間的數(shù)據(jù)傳輸。
它和 JSON 或 XML 有什么不同呢?Gob 特定地用于純 Go 的環(huán)境中,例如,兩個(gè)用 Go 寫的服務(wù)之間的通信。這樣的話服務(wù)可以被實(shí)現(xiàn)得更加高效和優(yōu)化。
Gob 不是可外部定義,語言無關(guān)的編碼方式。因此它的首選格式是二進(jìn)制,而不是像 JSON 和 XML 那樣的文本格式。
Gob 并不是一種不同于 Go 的語言,而是在編碼和解碼過程中用到了 Go 的反射。

Gob 文件或流是完全自描述的:里面包含的所有類型都有一個(gè)對(duì)應(yīng)的描述,并且總是可以用 Go 解碼,而不需要了解文件的內(nèi)容。

只有可導(dǎo)出的字段會(huì)被編碼,零值會(huì)被忽略。在解碼結(jié)構(gòu)體的時(shí)候,只有同時(shí)匹配名稱和可兼容類型的字段才會(huì)被解碼。當(dāng)源數(shù)據(jù)類型增加新字段后,Gob 解碼客戶端仍然可以以這種方式正常工作:解碼客戶端會(huì)繼續(xù)識(shí)別以前存在的字段。并且還提供了很大的靈活性,比如在發(fā)送者看來,整數(shù)被編碼成沒有固定長度的可變長度,而忽略具體的 Go 類型。

假如在發(fā)送者這邊有一個(gè)有結(jié)構(gòu) T:

type T struct { X, Y, Z int }
var t = T{X: 7, Y: 0, Z: 8}

而在接收者這邊可以用一個(gè)結(jié)構(gòu)體 U 類型的變量 u 來接收這個(gè)值:

type U struct { X, Y *int8 }
var u U

在接收者中,X 的值是 7,Y 的值是 0(Y 的值并沒有從 t 中傳遞過來,因?yàn)樗橇阒担?/p>

和 JSON 的使用方式一樣,Gob 使用通用的 io.Writer 接口,通過 NewEncoder() 函數(shù)創(chuàng)建 Encoder 對(duì)象并調(diào)用 Encode();相反的過程使用通用的 io.Reader 接口,通過 NewDecoder() 函數(shù)創(chuàng)建 Decoder 對(duì)象并調(diào)用 Decode。

我們把示例 12.12 的信息寫進(jìn)名為 vcard.gob 的文件作為例子。這會(huì)產(chǎn)生一個(gè)文本可讀數(shù)據(jù)和二進(jìn)制數(shù)據(jù)的混合,當(dāng)你試著在文本編輯中打開的時(shí)候會(huì)看到。

在示例 12.18 中你會(huì)看到一個(gè)編解碼,并且以字節(jié)緩沖模擬網(wǎng)絡(luò)傳輸?shù)暮唵卫樱?/p>

示例 12.18 gob1.go:

// gob1.go
package main
 
import (
    "bytes"
    "fmt"
    "encoding/gob"
    "log"
)
 
type P struct {
    X, Y, Z int
    Name    string
}
 
type Q struct {
    X, Y *int32
    Name string
}
 
func main() {
    // Initialize the encoder and decoder.  Normally enc and dec would be      
    // bound to network connections and the encoder and decoder would      
    // run in different processes.      
    var network bytes.Buffer   // Stand-in for a network connection      
    enc := gob.NewEncoder(&network) // Will write to network.      
    dec := gob.NewDecoder(&network) // Will read from network.      
    // Encode (send) the value.      
    err := enc.Encode(P{3, 4, 5, "Pythagoras"})
    if err != nil {
        log.Fatal("encode error:", err)
    }
    // Decode (receive) the value.      
    var q Q
    err = dec.Decode(&q)
    if err != nil {
        log.Fatal("decode error:", err)
    }
    fmt.Printf("%q: {%d,%d}\n", q.Name, *q.X, *q.Y)
}
// Output:   "Pythagoras": {3,4}

示例 12.19 gob2.go 編碼到文件:

import (
    "bufio"
    "encoding/gob"
    "fmt"
    "log"
    "os"
)
 
type Address struct {
    Type    string
    City    string
    Country string
}
 
type VCard struct {
    FirstName string
    LastName  string
    Addresses []*Address
    Remark    string
}
 
var content string
var vc VCard
 
func main() {
    // using a decoder:
    file, _ := os.Open("vcard.gob")
    defer file.Close()
    inReader := bufio.NewReader(file)
    dec := gob.NewDecoder(inReader)
    err := dec.Decode(&vc)
    if err != nil {
        log.Println("Error in decoding gob")
    }
    fmt.Println(vc)
}
 
// Output:
// {Jan Kersschot [0x12642e60 0x12642e80] none}

?

degob.go:

import (
    "bufio"
    "encoding/gob"
    "fmt"
    "log"
    "os"
)
 
type Address struct {
    Type    string
    City    string
    Country string
}
 
type VCard struct {
    FirstName string
    LastName  string
    Addresses []*Address
    Remark    string
}
 
var content string
var vc VCard
 
func main() {
    // using a decoder:
    file, _ := os.Open("vcard.gob")
    defer file.Close()
    inReader := bufio.NewReader(file)
    dec := gob.NewDecoder(inReader)
    err := dec.Decode(&vc)
    if err != nil {
        log.Println("Error in decoding gob")
    }
    fmt.Println(vc)
}
 
// Output:
// {Jan Kersschot [0x12642e60 0x12642e80] none}

到此這篇關(guān)于golang中g(shù)ob的實(shí)現(xiàn)示例的文章就介紹到這了,更多相關(guān)golang gob內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Go routine調(diào)度詳解

    Go routine調(diào)度詳解

    這篇文章主要介紹了Go routine調(diào)度詳解,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-01-01
  • Go語言正則表達(dá)式用法實(shí)例小結(jié)【查找、匹配、替換等】

    Go語言正則表達(dá)式用法實(shí)例小結(jié)【查找、匹配、替換等】

    這篇文章主要介紹了Go語言正則表達(dá)式用法,結(jié)合實(shí)例形式分析了Go語言基于正則實(shí)現(xiàn)查找、匹配、替換等基本操作的實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2017-01-01
  • Go如何在HTTP請(qǐng)求中操作cookie教程詳解

    Go如何在HTTP請(qǐng)求中操作cookie教程詳解

    這篇文章主要為大家介紹了Go如何在HTTP請(qǐng)求中操作cookie教程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-01-01
  • 淺談go語言中別名類型的使用

    淺談go語言中別名類型的使用

    類型別名是 Go 1.9 版本添加的新功能,主要用于解決代碼升級(jí)、遷移中存在的類型兼容性問題,本文主要介紹了go語言中別名類型的使用,感興趣的可以了解一下
    2024-01-01
  • 圖文詳解Go中的channel

    圖文詳解Go中的channel

    Channel是go語言內(nèi)置的一個(gè)非常重要的特性,也是go并發(fā)編程的兩大基石之一,下面這篇文章主要給大家介紹了關(guān)于Go中channel的相關(guān)資料,需要的朋友可以參考下
    2023-02-02
  • golang字符串本質(zhì)與原理詳解

    golang字符串本質(zhì)與原理詳解

    這篇文章主要介紹了golang字符串本質(zhì)與原理詳解,golang中的字符串指的是所有8比特位字節(jié)字符串的集合,通常是UTF-8編碼的文本,更多相關(guān)內(nèi)容需要的小伙伴可以參考一下
    2022-06-06
  • 一文掌握Golang模糊測試

    一文掌握Golang模糊測試

    本文主要介紹了一文掌握Golang模糊測試,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • go進(jìn)行http請(qǐng)求偶發(fā)EOF問題分析

    go進(jìn)行http請(qǐng)求偶發(fā)EOF問題分析

    go使用連接池進(jìn)行http請(qǐng)求,一般都能請(qǐng)求成功,但偶然會(huì)出現(xiàn)請(qǐng)求失敗返回EOF錯(cuò)誤的情況,本文主要來帶大家分析一下為什么會(huì)出現(xiàn)這樣的問題并提供解決方法,需要的可以參考下
    2025-01-01
  • 探索Golang實(shí)現(xiàn)Redis持久化AOF實(shí)例

    探索Golang實(shí)現(xiàn)Redis持久化AOF實(shí)例

    這篇文章主要為大家介紹了Golang實(shí)現(xiàn)Redis持久化AOF實(shí)例探索,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-01-01
  • Go標(biāo)準(zhǔn)庫encoding/gob的具體使用

    Go標(biāo)準(zhǔn)庫encoding/gob的具體使用

    Go標(biāo)準(zhǔn)庫encoding/gob實(shí)現(xiàn)二進(jìn)制序列化與反序列化,本文主要介紹了Go標(biāo)準(zhǔn)庫encoding/gob的具體使用,感興趣的可以了解一下
    2025-06-06

最新評(píng)論

瑞丽市| 平阴县| 乌拉特前旗| 怀集县| 遂昌县| 寿光市| 铁岭市| 岫岩| 天峻县| 赣州市| 阿勒泰市| 建始县| 沙雅县| 如东县| 教育| 许昌县| 巴林右旗| 赤城县| 南陵县| 孝昌县| 乌兰浩特市| 达日县| 视频| 江津市| 梁河县| 井冈山市| 丰城市| 青神县| 芮城县| 中方县| 江陵县| 万宁市| 双辽市| 宝山区| 攀枝花市| 上思县| 涿州市| 中阳县| 德兴市| 阿城市| 彰化县|