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

Golang讀寫二進制文件方法總結(jié)

 更新時間:2023年05月10日 16:00:24   作者:路多辛  
使用?Golang?的?encoding/gob?包讀寫二進制文件非常方便,而且代碼量也非常少,本文就來通過兩個示例帶大家了解一下encoding/gob的具體用法吧

使用 Golang 的 encoding/gob 包讀寫二進制文件非常方便,而且代碼量也非常少。但是在需要自定義二進制格式(自定義二進制格式有可能做到更緊湊的數(shù)據(jù)表示和更快的讀寫速度)的場景下,這個包就不適用了,這時候就需要使用到 encoding/binary 包了。

encoding/binary 包實現(xiàn)了數(shù)字(number)和字節(jié)序列(byte sequences)之間的簡單轉(zhuǎn)換以及 varints 的編碼和解碼,varints 是一種使用一個或多個字節(jié)表示整型數(shù)據(jù)的方法,其中數(shù)值本身越小,其所占用的字節(jié)數(shù)越少。

接下來演示一下序列化數(shù)據(jù)后保存到本地,再反序列化本地的數(shù)據(jù)。

序列化數(shù)據(jù)后保存到本地

package main
 
import (
	"bytes"
	"encoding/binary"
	"fmt"
	"os"
)
 
type User struct {
	Age int32
}
 
funcmain() {
	file, err := os.Create("bin")
	if err != nil {
		fmt.Println("文件創(chuàng)建失敗 ", err.Error())
		return
	}
	defer file.Close()
 
	for i := 1; i <= 10; i++ {
		data := User{
			int32(i),
		}
		var buf bytes.Buffer
		binary.Write(&buf, binary.LittleEndian, data)
		b := buf.Bytes()
		_, err = file.Write(b)
		if err != nil {
			fmt.Println("寫入失敗", err.Error())
			return
		}
	}
	fmt.Println("序列化成功")
}

反序列化本地的數(shù)據(jù)

package main
 
import (
	"bytes"
	"encoding/binary"
	"fmt"
	"os"
)
 
type User struct {
	Age int32
}
 
funcmain() {
	file, err := os.Open("bin")
	if err != nil {
		fmt.Println("文件打開失敗 ", err.Error())
		return
	}
	defer file.Close()
 
	data := User{}
	for i := 1; i <= 10; i++ {
		b := make([]byte, 4)
		_, err = file.Read(b)
		if err != nil {
			fmt.Println("反序列化失敗", err)
		}
		buffer := bytes.NewBuffer(b)
		err = binary.Read(buffer, binary.LittleEndian, &data)
		if err != nil {
			fmt.Println("二進制文件讀取失敗", err)
			return
		}
		fmt.Println("第", i, "個值為:", data)
	}
}

更多關(guān)于 encoding/binary 的內(nèi)容請參考此包的源代碼。

補充

除了上文的方法,下面小編還為大家整理了encoding/gob 包讀寫二進制文件的其他方法

gob是Golang自帶的一個數(shù)據(jù)結(jié)構(gòu)序列化的編碼/解碼工具,和JSON、XML、Google 的 protocol buffers類似。gob編碼使用Encoder,解碼使用Decoder。一種典型的應(yīng)用場景就是RPC(remote procedure calls)。

接下來演示一下序列化數(shù)據(jù)后保存到本地,再反序列化本地的數(shù)據(jù)。

序列化數(shù)據(jù)后保存到本地

package main
 
import (
	"encoding/gob"
	"fmt"
	"os"
)
 
func main() {
	data := "測試讀寫二進制文件"
	file, err := os.Create("bin") // 創(chuàng)建文件
	if err != nil {
		fmt.Println("文件創(chuàng)建失敗", err.Error())
		return
	}
	defer file.Close()
	encoder := gob.NewEncoder(file)
	err = encoder.Encode(data)
	if err != nil {
		fmt.Println("編碼錯誤", err.Error())
		return
	}
}

反序列化本地的數(shù)據(jù)

package main
 
import (
	"encoding/gob"
	"fmt"
	"os"
)
 
func main() {
	file, err := os.Open("bin")
	if err != nil {
		fmt.Println("文件打開失敗", err.Error())
		return
	}
	defer file.Close()
	decoder := gob.NewDecoder(file)
	var data string
	err = decoder.Decode(&data)
	if err != nil {
		fmt.Println("解碼失敗", err.Error())
		return
	}
	fmt.Println(data)
}

到此這篇關(guān)于Golang讀寫二進制文件方法總結(jié)的文章就介紹到這了,更多相關(guān)Golang讀寫二進制文件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Go語言二進制文件的讀寫操作

    Go語言二進制文件的讀寫操作

    本文主要介紹了Go語言二進制文件的讀寫操作,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • Go?gRPC進階教程gRPC轉(zhuǎn)換HTTP

    Go?gRPC進階教程gRPC轉(zhuǎn)換HTTP

    這篇文章主要為大家介紹了Go?gRPC進階教程gRPC轉(zhuǎn)換HTTP教程示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-06-06
  • GoLang之go build命令的具體使用

    GoLang之go build命令的具體使用

    本文主要介紹了GoLang之go build命令的具體使用,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • Go類型斷言提取測試接口值動態(tài)類型及靜態(tài)轉(zhuǎn)換確保類型接口編譯安全

    Go類型斷言提取測試接口值動態(tài)類型及靜態(tài)轉(zhuǎn)換確保類型接口編譯安全

    這篇文章主要為大家介紹了Go類型斷言提取測試接口值動態(tài)類型及靜態(tài)轉(zhuǎn)換確保類型實現(xiàn)特定接口的編譯時安全性詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-10-10
  • Golang服務(wù)的請求調(diào)度的實現(xiàn)

    Golang服務(wù)的請求調(diào)度的實現(xiàn)

    Golang服務(wù)請求調(diào)度是一種使用Go語言實現(xiàn)的服務(wù)請求管理方法,本文主要介紹了Golang服務(wù)的請求調(diào)度的實現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2023-08-08
  • 基于Go+OpenCV實現(xiàn)人臉識別功能的詳細示例

    基于Go+OpenCV實現(xiàn)人臉識別功能的詳細示例

    OpenCV是一個強大的計算機視覺庫,提供了豐富的圖像處理和計算機視覺算法,本文將向你介紹在Mac上安裝OpenCV的步驟,并演示如何使用Go的OpenCV綁定庫進行人臉識別,需要的朋友可以參考下
    2023-07-07
  • 源碼剖析Golang中singleflight的應(yīng)用

    源碼剖析Golang中singleflight的應(yīng)用

    這篇文章主要為大家詳細介紹了如何利用singleflight來避免緩存擊穿,并剖析singleflight包的源碼實現(xiàn)和工作原理,感興趣的可以了解下
    2024-03-03
  • go?colly?爬蟲實現(xiàn)示例

    go?colly?爬蟲實現(xiàn)示例

    這篇文章主要為大家介紹了go?colly?爬蟲實現(xiàn)示例,效果是根據(jù)輸入的瀏覽器cookie及excel必要行列號,從excel中讀取公司名稱,查詢公司法人及電話號碼。并寫回到excel中指定行
    2022-09-09
  • 使用Go語言開發(fā)一個高并發(fā)系統(tǒng)

    使用Go語言開發(fā)一個高并發(fā)系統(tǒng)

    高并發(fā)系統(tǒng)是指能同時支持眾多用戶請求,處理大量并行計算的系統(tǒng),這篇文章主要為大家詳細介紹了如何使用Go語言開發(fā)一個高并發(fā)系統(tǒng),感興趣的小伙伴可以了解下
    2023-11-11
  • golang中g(shù)in框架接入jwt使用token驗證身份

    golang中g(shù)in框架接入jwt使用token驗證身份

    本文主要介紹了golang中g(shù)in框架接入jwt使用token驗證身份,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-12-12

最新評論

新宁县| 鄯善县| 福安市| 铜川市| 奉节县| 云龙县| 武鸣县| 洞口县| 稻城县| 富阳市| 南通市| 寻甸| 锦州市| 石首市| 永胜县| 广安市| 桂平市| 江山市| 阿克苏市| 明光市| 长子县| 峨边| 旅游| 东方市| 札达县| 黄陵县| 康马县| 云霄县| 米泉市| 成都市| 通化市| 秦安县| 南江县| 兴城市| 宜宾县| 大同县| 沂南县| 和龙市| 佛坪县| 枣强县| 桃源县|