新聞中心
Go語(yǔ)言的二進(jìn)制(gob)格式是一個(gè)自描述的二進(jìn)制序列。從其內(nèi)部表示來(lái)看,Go語(yǔ)言的二進(jìn)制格式由一個(gè) 0 塊或者更多塊的序列組成,其中的每一塊都包含一個(gè)字節(jié)數(shù),一個(gè)由 0 個(gè)或者多個(gè) typeId-typeSpecification 對(duì)組成的序列,以及一個(gè) typeId-value 對(duì)。

公司主營(yíng)業(yè)務(wù):成都網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)、移動(dòng)網(wǎng)站開(kāi)發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競(jìng)爭(zhēng)能力。創(chuàng)新互聯(lián)建站是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開(kāi)放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對(duì)我們的高要求,感謝他們從不同領(lǐng)域給我們帶來(lái)的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來(lái)驚喜。創(chuàng)新互聯(lián)建站推出寬城免費(fèi)做網(wǎng)站回饋大家。
如果 typeId-value 對(duì)的 typeId 是預(yù)先定義好的(例如 bool、int 和 string 等),則這些 typeId-typeSpecification 對(duì)可以省略。否則就用類型對(duì)來(lái)描述一個(gè)自定義類型(如一個(gè)自定義的結(jié)構(gòu)體)。類型對(duì)和值對(duì)之間的 typeId 沒(méi)有區(qū)別。
正如我們將看到的,我們無(wú)需了解其內(nèi)部結(jié)構(gòu)就可以使用 gob 格式, 因?yàn)?encoding/gob 包會(huì)在幕后為我們打理好一切底層細(xì)節(jié)。
Go語(yǔ)言中的 encoding/gob 包也提供了與 encoding/json 包一樣的編碼解碼功能,并且容易使用。通常而言如果對(duì)肉眼可讀性不做要求,gob 格式是Go語(yǔ)言上用于文件存儲(chǔ)和網(wǎng)絡(luò)傳輸最為方便的格式。
寫(xiě)Go語(yǔ)言二進(jìn)制文件
下面通過(guò)一個(gè)簡(jiǎn)單的示例來(lái)演示一下Go語(yǔ)言是如何生成一個(gè)二進(jìn)制文件的,代碼如下所示:
package main
import (
"encoding/gob"
"fmt"
"os"
)
func main() {
info := "http://c.biancheng.net/golang/"
file, err := os.Create("./output.gob")
if err != nil {
fmt.Println("文件創(chuàng)建失敗", err.Error())
return
}
defer file.Close()
encoder := gob.NewEncoder(file)
err = encoder.Encode(info)
if err != nil {
fmt.Println("編碼錯(cuò)誤", err.Error())
return
} else {
fmt.Println("編碼成功")
}
}運(yùn)行上面的代碼會(huì)在當(dāng)前目錄下生成一個(gè) output.gob 文件,文件內(nèi)容如下所示:
210c 001e 6874 7470 3a2f 2f63 2e62 6961
6e63 6865 6e67 2e6e 6574 2f67 6f6c 616e
672f
讀Go語(yǔ)言二進(jìn)制文件
讀 gob 數(shù)據(jù)和寫(xiě)一樣簡(jiǎn)單,示例代碼如下:
package main
import (
"encoding/gob"
"fmt"
"os"
)
func main() {
file, err := os.Open("./output.gob")
if err != nil {
fmt.Println("文件打開(kāi)失敗", err.Error())
return
}
defer file.Close()
decoder := gob.NewDecoder(file)
info := ""
err = decoder.Decode(&info)
if err != nil {
fmt.Println("解碼失敗", err.Error())
} else {
fmt.Println("解碼成功")
fmt.Println(info)
}
}
運(yùn)行結(jié)果如下:
go run main.go
解碼成功
http://c.biancheng.net/golang/
文章題目:創(chuàng)新互聯(lián)GO教程:Go語(yǔ)言二進(jìn)制文件的讀寫(xiě)操作
本文來(lái)源:http://www.5511xx.com/article/djsdoip.html


咨詢
建站咨詢
