第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

如何將具有字節(jié)切片數(shù)據(jù)類型的結(jié)構(gòu)轉(zhuǎn)換為字節(jié)?

如何將具有字節(jié)切片數(shù)據(jù)類型的結(jié)構(gòu)轉(zhuǎn)換為字節(jié)?

Go
慕絲7291255 2022-05-18 14:33:58
我需要在套接字通信期間發(fā)送具有字節(jié)切片數(shù)據(jù)類型的結(jié)構(gòu)數(shù)據(jù)。type A struct {    header []byte    body   []byte}所以我編寫了以下源代碼將結(jié)構(gòu)轉(zhuǎn)換為字節(jié)。var a Aa.header = byte slice data...a.body   = byte slice data...buf := new(bytes.Buffer)binary.Write(buf, binary.BigEndian, a)但是,我收到一個(gè)錯(cuò)誤,顯示以下錯(cuò)誤的 binary.Write 函數(shù):binary.Write: invalid type main.A我發(fā)現(xiàn)固定數(shù)組解決了這個(gè)問(wèn)題。但是由于數(shù)據(jù)的長(zhǎng)度是不斷變化的,所以我不得不使用切片而不是固定數(shù)組。有沒(méi)有辦法解決這個(gè)問(wèn)題?
查看完整描述

1 回答

?
料青山看我應(yīng)如是

TA貢獻(xiàn)1772條經(jīng)驗(yàn) 獲得超8個(gè)贊

如果你寫一個(gè)可變長(zhǎng)度的字節(jié)片,另一端將不知道它需要讀取多少字節(jié)。你也必須傳達(dá)長(zhǎng)度。


因此,發(fā)送字節(jié)切片的一種方法是首先使用固定大小的類型寫入長(zhǎng)度(字節(jié)數(shù)),例如int32or int64。然后簡(jiǎn)單地寫入字節(jié)片。


例如:


var w io.Writer // This represents your connection

var a A


if err := binary.Write(w, binary.LittleEndian, int32(len(a.header))); err != nil {

    // Handle error

}

if _, err := w.Write(a.header); err != nil {

    // Handle error

}

您也可以使用相同的邏輯發(fā)送a.body。


另一方面,您可以這樣閱讀它:


var r io.Reader // This represents your connection

var a A


var size int32

if err := binary.Read(r, binary.LittleEndian, &size); err != nil {

    // Handle error

}

a.header = make([]byte, size)

if _, err := io.ReadFull(r, a.header); err != nil {

    // Handle error

}

在Go Playground上嘗試一個(gè)工作示例。


如果您必須傳輸更復(fù)雜的結(jié)構(gòu),請(qǐng)考慮使用encoding/gobwhich 處理輕松發(fā)送切片。有關(guān)示例和一些見解,請(qǐng)參閱Efficient Go serialization of struct to disk。


查看完整回答
反對(duì) 回復(fù) 2022-05-18
  • 1 回答
  • 0 關(guān)注
  • 141 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)