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