Go语言数组与切片区别

Go语言数组与切片区别教程

Golang数组切片 的区别主要体现在以下几点:

  • 切片是指针类型,数组是值类型
  • 数组的长度是固定的,而切片长度可以任意调整(切片是动态的数组)
  • 数组只有长度一个属性,而切片比数组多了一个容量(cap)属性
  • 切片的底层也是数组实现的

案例

指针类型与值类型区别

切片是指针类型,数组是值类型

package main import ( "fmt" ) func changeSlice(slice []int){ for i, value := range slice{ slice[i] += value } } func changeArr(slice [6]int){ for i, value := range slice{ slice[i] += value } } func main() { fmt.Println("嗨客网(www.haicoder.net)") //切片是指针类型,数组是值类型 number1 := []int{1, 2, 3, 4, 5, 6} changeSlice(number1) fmt.Println(number1) numbers2 := [...]int{1, 2, 3, 4, 5, 6} changeArr(numbers2) fmt.Println(numbers2) }

程序运行后,控制台输出如下:

123 golang数组与切片区别.png

首先,我们定义了两个 函数,一个是 changeSlice 修改传入的切片的每一个元素的值,将其值加上元素的值的本身,另一个是 changeArr 同样实现修改元素本身值的功能。

main 函数中,我们分别定义了切片和数组,分别调用两个函数来修改切片的值和数组的值,结果发现只有切片的值被修改了,而数组的值未被修改。

因此切片是指针类型的,因此传入函数的就是切片本身,而数组是值类型的,因此传入函数的是一个数组的拷贝。