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

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


咨詢
建站咨詢
