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

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

附加到二維切片時的奇怪行為

附加到二維切片時的奇怪行為

Go
不負(fù)相思意 2022-01-10 16:58:30
我使用二維字節(jié)切片來表示一堆行,但是當(dāng)我附加到其中一行時,我得到了一些非常奇怪的行為。這是一個例子:package mainimport (    "bytes"    "fmt")func main() {    str := []byte("first line\nsecond line\nthird line")    values := bytes.Split(str, []byte("\n"))    fmt.Println("Before:")    fmt.Println(string(values[0]))    fmt.Println(string(values[1]))    fmt.Println(string(values[2]))    fmt.Println()    values[0] = append(values[0], []byte("-inserted text-")...)    fmt.Println("After:")    fmt.Println(string(values[0]))    fmt.Println(string(values[1]))    fmt.Println(string(values[2]))}我希望這個程序的輸出是Before:first linesecond linethird lineAfter:first line-inserted text-second linethird line但相反的輸出是:Before:first linesecond linethird lineAfter:first line-inserted text-inserted tet-ird linehttps://play.golang.org/p/iNw6s1S66U為什么會發(fā)生這種情況,我該如何解決?有趣的是,如果我不使用 split 而是定義如下值,則不會發(fā)生這種情況:values := [][]byte{[]byte("first line"), []byte("second line"), []byte("third line")}https://play.golang.org/p/pEflrhKLd4
查看完整描述

2 回答

?
SMILET

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

底層存儲是共享的,因此要獲得所需的效果,您需要存儲從 返回的切片的副本bytes.Split,而不僅僅是返回的切片。當(dāng)您附加到返回的第一個切片時,您實際上是在踩到后面的切片。


查看完整回答
反對 回復(fù) 2022-01-10
?
慕斯709654

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

您正在做的是附加到字符串,而不是附加到數(shù)組,這會溢出切片的底層數(shù)據(jù)結(jié)構(gòu)。這就是為什么數(shù)組的其余部分被您附加的字符串覆蓋的原因。

澄清(可能并非總是如此):

該數(shù)組values由連續(xù)排列的 3 個 []byte 塊組成。每個 []byte 塊都有固定的長度(基于其中字符串的長度)。所以values[0]長度為 10(不包括 '\n' 或 '\0')?,F(xiàn)在,如果您嘗試附加"-inserted text-"到該塊,字符將“流入”到連續(xù)塊中values[1], 用 中的字符替換values[1]其中的字符"-inserted text-"。這就是為什么您會在values[1]和 中看到這些字符的一部分values[1]。


查看完整回答
反對 回復(fù) 2022-01-10
  • 2 回答
  • 0 關(guān)注
  • 151 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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