当前位置:  首页>> 技术小册>> GO面试指南

数组和切片是 Go 中常用的两种数据结构,它们都可以用来存储一组数据。数组和切片的主要区别在于长度和内存管理。

数组的长度是固定的,一旦创建,长度就不能改变。而切片是一个可变长度的序列,可以动态增加或缩小。

另外,数组的底层存储是在栈上的,而切片的底层存储是在堆上的,因此切片需要进行内存分配和垃圾回收,而数组不需要。

数组的另一个优势在于它是值类型,可以通过赋值操作来复制一个数组。而切片是引用类型,复制一个切片只是复制了指向底层数组的指针,而不是复制了整个底层数组。

以下是一个示例代码,演示了数组和切片的用法和区别:

  1. package main
  2. import "fmt"
  3. func main() {
  4. // 定义一个长度为5的数组
  5. arr := [5]int{1, 2, 3, 4, 5}
  6. // 定义一个切片,初始为空,长度为0
  7. slice := []int{}
  8. // 输出数组和切片
  9. fmt.Println("Array:", arr)
  10. fmt.Println("Slice:", slice)
  11. // 修改数组的第一个元素
  12. arr[0] = 10
  13. // 向切片中添加元素
  14. slice = append(slice, 1)
  15. // 输出修改后的数组和切片
  16. fmt.Println("Array:", arr)
  17. fmt.Println("Slice:", slice)
  18. }

在这个例子中,我们定义了一个长度为 5 的数组 arr 和一个初始为空的切片 slice。然后,我们分别向数组和切片中添加了一个元素,并输出了它们的值。需要注意的是,向数组中添加元素是不允许的,因为数组的长度是固定的。而向切片中添加元素是通过 append 函数实现的,它会返回一个新的切片。

此外,我们还演示了数组是值类型,修改一个数组不会影响其他数组,而切片是引用类型,修改一个切片会影响其他指向同一个底层数组的切片。


该分类下的相关小册推荐: