我正在嘗試根據(jù)條件邏輯重新分配字節(jié)數(shù)組。我不明白我的選擇。這是代碼:s3Buffer, numBytes, err := DownloadS3File(event.S3Bucket, event.S3ObjectID, session)header, err = GetHeader(s3Buffer)var outBuffer []byteif HeaderIndicatesConversionNeeded(header) { outBuffer, err = ConvertBuffer(s3Buffer, event.ObjectID)} else { // outBuffer = s3Buffer or copy(outBuffer, s3Buffer) or outBuffer = *s3Buffer or ??}// use outBuffer...我需要讓 outBuffer 與 s3Buffer 相同,這是一個包含我下載的 s3 對象內(nèi)容的字節(jié)數(shù)組。復(fù)制命令似乎不合邏輯,但更直接。我已經(jīng)閱讀了幾天的 Go 教程,但我無法弄清楚這一點。我對 Go 很陌生,所以我可能會在這里做一些非常錯誤的事情,我承認。
1 回答
jeck貓
TA貢獻1909條經(jīng)驗 獲得超7個贊
outBuffer = s3Buffer將復(fù)制切片標(biāo)頭,但不會復(fù)制實際數(shù)據(jù)。這是最快的并且完全沒問題,只要知道在這個賦值之后兩個變量都將指向相同的數(shù)據(jù),所以通過它們中的任何一個修改數(shù)據(jù)都會反映在另一個上。請參閱切片是否按值傳遞?
copy()如果您想將一個切片與另一個切片“分離”,這很有用。請注意,copy()還需要您預(yù)先分配目標(biāo)切片,因為它不再復(fù)制源中可用的內(nèi)容以及可以復(fù)制到目標(biāo)的內(nèi)容(它復(fù)制 和 的最小值len(src))len(dst)。有關(guān)詳細信息,請參閱為什么我不能使用 `copy()` 復(fù)制切片?
作為 的替代方法copy(),您可以使用內(nèi)置append()函數(shù)。它將元素附加到一個切片上,這些元素可能是另一個切片的元素;但是——不像copy()——append()在需要時負責(zé)空間分配。它看起來像:
outBuffer = append(outBuffer, s3Buffer...)
閱讀博客文章以了解有關(guān)切片的更多信息:
Go Slices:用法和內(nèi)部結(jié)構(gòu)
- 1 回答
- 0 關(guān)注
- 97 瀏覽
添加回答
舉報
0/150
提交
取消
