为了账号安全,请及时绑定邮箱和手机立即绑定

试图了解如何在 Go 中重命名字节数组

试图了解如何在 Go 中重命名字节数组

Go
德玛西亚99 2022-10-17 17:11:25
我正在尝试根据条件逻辑重新分配字节数组。我不明白我的选择。这是代码: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 对象内容的字节数组。复制命令似乎不合逻辑,但更直接。我已经阅读了几天的 Go 教程,但我无法弄清楚这一点。我对 Go 很陌生,所以我可能会在这里做一些非常错误的事情,我承认。
查看完整描述

1 回答

?
jeck猫

TA贡献1909条经验 获得超7个赞

outBuffer = s3Buffer将复制切片标头,但不会复制实际数据。这是最快的并且完全没问题,只要知道在这个赋值之后两个变量都将指向相同的数据,所以通过它们中的任何一个修改数据都会反映在另一个上。请参阅切片是否按值传递?

copy()如果您想将一个切片与另一个切片“分离”,这很有用。请注意,copy()还需要您预先分配目标切片,因为它不再复制源中可用的内容以及可以复制到目标的内容(它复制 和 的最小值len(src)len(dst)。有关详细信息,请参阅为什么我不能使用 `copy()` 复制切片?

作为 的替代方法copy(),您可以使用内置append()函数。它将元素附加到一个切片上,这些元素可能是另一个切片的元素;但是——不像copy()——append()在需要时负责空间分配。它看起来像:

outBuffer = append(outBuffer, s3Buffer...)

阅读博客文章以了解有关切片的更多信息:

Go Slices:用法和内部结构

数组、切片(和字符串):“追加”的机制


查看完整回答
反对 回复 2022-10-17
  • 1 回答
  • 0 关注
  • 87 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号