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

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

bytes.String() 與 bytes.Bytes() 在 Go 中

bytes.String() 與 bytes.Bytes() 在 Go 中

Go
慕容708150 2023-03-21 17:24:04
考慮這樣一個文本文件:Some texthere.---More textanother line.---Third part of text.我想把它分成三部分,用分隔---符分開。零件應(yīng)存儲在地圖中?,F(xiàn)在,具有不同類型的完全相同的程序。當(dāng)我使用時string,一切正常:KEY: 0Some texthere.KEY: 1More textanother line.KEY: 2Third part of text.https://play.golang.org/p/IcGdoUNcTEe當(dāng)我使用時[]byte,事情變得一團糟:KEY: 0Third part of teKEY: 1Third part of text.ne.KEY: 2Third part of text.https://play.golang.org/p/jqLhCrqsvOs為什么?計劃 1 ( string):func main() {    parts := parseParts([]byte(input))    for k, v := range parts {        fmt.Printf("KEY: %d\n%s", k, v)    }}func parseParts(input []byte) map[int]string {    parts := map[int]string{}    s := bufio.NewScanner(bytes.NewReader(input))    buf := bytes.Buffer{}    i := 0    for s.Scan() {        if s.Text() == "---" {            parts[i] = buf.String()            buf.Reset()            i++            continue        }        buf.Write(s.Bytes())        buf.WriteString("\n")    }    parts[i] = buf.String()    return parts}計劃 2 ( []byte):func main() {    parts := parseParts([]byte(input))    for k, v := range parts {        fmt.Printf("KEY: %d\n%s", k, v)    }}func parseParts(input []byte) map[int]string {    parts := map[int]string{}    s := bufio.NewScanner(bytes.NewReader(input))    buf := bytes.Buffer{}    i := 0    for s.Scan() {        if s.Text() == "---" {            parts[i] = buf.String()            buf.Reset()            i++            continue        }        buf.Write(s.Bytes())        buf.WriteString("\n")    }    parts[i] = buf.String()    return parts}
查看完整描述

2 回答

?
慕工程0101907

TA貢獻1887條經(jīng)驗 獲得超5個贊

在字符串版本中,


parts[i] = buf.String()

parts[i]每次都設(shè)置為一個新字符串。在[]byte版本中,


parts[i] = buf.Bytes()

每次都設(shè)置parts[i]為由相同數(shù)組支持的字節(jié)切片。后備數(shù)組的內(nèi)容對于所有三個切片都是相同的,但長度與創(chuàng)建時的長度匹配,這就是為什么所有三個切片顯示相同的內(nèi)容但在不同的地方截斷的原因。


您可以替換字節(jié)切片行


parts[i] = buf.Bytes()

像這樣:


bb := buf.Bytes()

b := make([]byte, len(bb))

copy(b, bb)

parts[i] = b

為了獲得與字符串版本匹配的行為。但是字符串版本更容易,也更符合您似乎想要做的事情。


查看完整回答
反對 回復(fù) 2023-03-21
?
喵喵時光機

TA貢獻1846條經(jīng)驗 獲得超7個贊

區(qū)別在于bytes.Buffer.String復(fù)制內(nèi)存,而bytes.Buffer.Bytes不會。引用文檔,

該切片僅在下一次緩沖區(qū)修改之前有效(即,僅在下一次調(diào)用 Read、Write、Reset 或 Truncate 等方法之前)。


查看完整回答
反對 回復(fù) 2023-03-21
  • 2 回答
  • 0 關(guān)注
  • 116 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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