MST

星途 面试题库

面试题:Go中切片扩容机制及复制操作的理解

请描述Go语言中切片在什么情况下会发生扩容,扩容的大致规则是什么?另外,使用内置的copy函数对切片进行复制时,需要注意哪些问题?
46.0万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试

切片扩容情况

当向切片中添加元素时,如果当前切片的容量不足以容纳新元素,就会发生扩容。

扩容大致规则

  1. 若新的元素个数小于等于当前容量的两倍且原切片容量小于1024,则新容量会变为原容量的两倍。
  2. 若原切片容量大于等于1024,则新容量会变为原容量的1.25倍。
  3. 扩容时会重新分配内存,将原切片内容复制到新的内存地址。

使用内置copy函数复制切片的注意事项

  1. 目标和源切片copy函数的第一个参数是目标切片,第二个参数是源切片。目标切片必须已经分配好足够的空间来容纳源切片中要复制的元素。
  2. 复制数量copy函数会返回实际复制的元素个数,这个返回值在处理部分复制时可能很有用。如果目标切片容量小于源切片,只会复制目标切片能容纳的元素个数。
  3. 不改变容量copy函数只复制元素值,不会改变切片的容量。如果需要增加容量,需要手动创建新的切片并重新分配容量。