php小編新一在Go語言中,切片是一種動(dòng)態(tài)數(shù)組,可以根據(jù)需要進(jìn)行動(dòng)態(tài)擴(kuò)容。切片的完整重新切片和切片之間的區(qū)別在于,完整重新切片會(huì)創(chuàng)建一個(gè)新的切片,該切片的容量和長度可以與原切片不同。而切片之間的賦值操作僅僅是將原切片的引用復(fù)制給新切片,新切片與原切片共享底層數(shù)組的存儲(chǔ)結(jié)構(gòu)。因此,在對(duì)新切片進(jìn)行修改時(shí),原切片也會(huì)受到影響。這是切片和切片的完整重新切片之間的重要區(qū)別。
問題內(nèi)容
切片和完整切片之間有區(qū)別嗎?
給定一個(gè)切片 s:= make([]byte, 4, 4)
,
copy(s[:], "data")
和 copy(s, "data")
有區(qū)別嗎?
這兩行代碼是否會(huì)輸出不同的結(jié)果?
解決方法
Go 中的切片有 3 個(gè)屬性:
底層數(shù)組
切片的長度
切片的容量
s
和 s[:]
在上述所有屬性方面都是相同的。
Go 實(shí)際上并沒有為切片定義 ==
操作,但是 s
和 s[:]
在所有可測量屬性都相同的意義上是相等的。
copy
函數(shù)僅關(guān)注前 2 個(gè)屬性,這兩個(gè)屬性在 s
之間是相同的和 s[:]
。