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

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

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

使用 Golang 的 encoding/gob 包讀寫二進(jìn)制文件非常方便,而且代碼量也非常少。但是在需要自定義二進(jìn)制格式(自定義二進(jìn)制格式有可能做到更緊湊的數(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("二進(jìn)制文件讀取失敗", err)
			return
		}
		fmt.Println("第", i, "個值為:", data)
	}
}

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

補充

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

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 := "測試讀寫二進(jìn)制文件"
	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讀寫二進(jìn)制文件方法總結(jié)的文章就介紹到這了,更多相關(guān)Golang讀寫二進(jìn)制文件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Go語言二進(jìn)制文件的讀寫操作

    Go語言二進(jìn)制文件的讀寫操作

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

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

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

    GoLang之go build命令的具體使用

    本文主要介紹了GoLang之go build命令的具體使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(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)特定接口的編譯時安全性詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jì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)人臉識別功能的詳細(xì)示例

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

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

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

    這篇文章主要為大家詳細(xì)介紹了如何利用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),這篇文章主要為大家詳細(xì)介紹了如何使用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驗證身份,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-12-12

最新評論

霍邱县| 广昌县| 容城县| 鄂尔多斯市| 扎赉特旗| 张北县| 金阳县| 交口县| 额尔古纳市| 岢岚县| 吕梁市| 涞水县| 和林格尔县| 南溪县| 泾阳县| 石渠县| 望奎县| 广东省| 永和县| 湟源县| 江孜县| 兰坪| 大余县| 正镶白旗| 南汇区| 惠安县| 眉山市| 大理市| 江陵县| 长岭县| 武威市| 内丘县| 辉县市| 景宁| 博兴县| 永吉县| 新闻| 财经| 永登县| 高阳县| 元江|