当前位置: 首页 > 知识库问答 >
问题:

尝试理解如何在Go中重命名字节数组

邹俊友
2023-03-14

我试图根据条件逻辑重新分配字节数组。我不明白我的选择。这是代码:

s3Buffer, numBytes, err :=  DownloadS3File(event.S3Bucket, event.S3ObjectID, session)

header, err = GetHeader(s3Buffer)

var outBuffer []byte

if HeaderIndicatesConversionNeeded(header) {
    outBuffer, err = ConvertBuffer(s3Buffer, event.ObjectID)
} else {
    // outBuffer = s3Buffer or copy(outBuffer, s3Buffer) or outBuffer = *s3Buffer or ??
}

// use outBuffer...

我需要让Exputfer与s3Buffer是同一类型的东西,s3Buffer是一个包含我下载的s3对象内容的字节数组。copy命令似乎不合逻辑,但更简单。我已经阅读围棋教程好几天了,但是我找不到清晰的答案。我是新来的,所以我承认我可能在这里犯了一些严重的错误。

共有1个答案

明利
2023-03-14

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

copy()如果要将一个切片与另一个切片“分离”,则非常有用。请注意,copy()还需要您预先分配目标切片,因为它只复制源中可用的内容和可以复制到目标的内容(它复制len(src)len(dst))。有关详细信息,请参见为什么不能使用“copy()”复制切片?

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

outBuffer = append(outBuffer, s3Buffer...)

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

Go切片:用法和内部结构

数组,切片(和字符串):'append'的机制

 类似资料:
  • 问题内容: 当我在名为$ tags的变量(多维数组)上进行var_dump时,会得到以下信息: 我想将所有名为“ url”的数组键重命名为“值”。什么是做到这一点的好方法? 问题答案: 您可以用来做。

  • 问题内容: 我正在尝试在Go程序中执行shellcode,类似于您如何使用其他语言来执行它。 示例- http://www.debasish.in/2012/04/execute-shellcode-using- python.html 所有方法都具有大致相似的技术- 通过操作系统特定的分配(mmap,virtualalloc等)将shellcode分配给可执行内存,然后通过在执行之前创建指向该位

  • 问题内容: 在使用以下代码初始化时,我拼错了名称: 我实际上打算用名称创建环境。尝试将文件夹重命名为时,我发现这没有太大帮助。激活环境的名称仍重命名旧的。 我想知道如何重命名环境? 问题答案: 默认情况下,virtualenv不支持环境重命名。仅删除virtualenv目录并使用正确的名称创建一个新目录是更安全的。您可以通过以下方式做到这一点: 激活您的virtualenv: 创建当前安装的软件包

  • 问题内容: 我有这样的文件 我需要更改为 为此,首先将字段映射添加到现有索引 然后尝试重新索引 错误是 问题答案: 该字段在您的文档中尚不存在,因此您的脚本需要首先创建它: 或更短一些:

  • 问题内容: 我的成员有一个结构,我正在用编写它。麻烦的是,它将s解释为s,并且它输出字符串而不是数字数组。 如果它是,我可以使它工作,但是如果可以避免的话,我不想分配和复制这些项目。我可以吗? 问题答案: 根据文档,a 将被编码为Base64字符串。 “数组和切片值编码为JSON数组, 除了[] byte编码为base64编码的字符串 ,而nil slice编码为空JSON对象。” 因此,我认为您

  • 问题内容: 我想重命名索引。我看过alter table文档,但无法弄清楚简单地重命名索引的语法。通过MySQL GUI进行操作时,它将删除索引并创建一个新索引。在这种情况下,我希望避免仅为了更改索引名称而重建整个索引。 [附加信息] 在alter table文档中指出 可以通过更改表的.frm文件而不接触表内容来立即进行仅修改表元数据而不修改表数据的更改。以下更改是可以通过这种方式进行的快速更改