解释array和slice的区别 ?

在Go语言中,数组(Array)切片(Slice)都是用来存储元素的集合,但他们在使用和性质上有一些重要的区别。

数组:

  1. 数组是具有固定长度的数据类型,这个长度在声明时被设定,并且之后不能更改。
  2. 当你将一个数组赋值给另一个数组时,内容会被复制。如果你在一个数组上做了改动,那么原始数组不会被改变。

切片:

  1. 切片是对数组一个连续片段的引用,因此切片是动态的,长度可以按需增加或减少。切片的长度可以在运行时改变。
  2. 当你将一个切片赋值给另一个切片时,他们都会引用同一个底层数组。如果你在一个切片上做了改动,那么原始切片和底层数组都会被改变。

以下例子可以帮助理解这些区别:

func main() {
    arr := [3]int{1, 2, 3} // an array
    sli := []int{1, 2, 3}  // a slice

    anotherArr := arr
    anotherArr[0] = 9
    fmt.Println(arr) // Output: [1 2 3]

    anotherSli := sli
    anotherSli[0] = 9
    fmt.Println(sli) // Output: [9 2 3]
}

在这个例子中,我们看到修改anotherArr并不会影响原始的arr,但是修改anotherSli确实改变了原始的sli。这是因为数组在赋值时进行了内容复制,而切片只是创建了对同一底层数组的新引用。

发表评论

后才能评论