Golang数组与切片的区别

Golang 数组与切片的区别

数组与切片的基本概念

1.1 数组的定义和初始化

数组是一种固定长度的数据结构,声明时需要指定长度。

1
2
3
4
5
6
7
8
package main

import "fmt"

func main() {
	var a [3]int = [3]int{1, 2, 3}
	fmt.Println(a)
}

https://blog.meowrain.cn/api/i/2025/01/27/BTK5cc1737907569360536265.avif

1.2 切片的定义和初始化

切片是一个动态的长度可变的序列,切片初始化与定义不需要指定长度,而是通过对数组的引用来创建

1
2
3
4
5
6
7
8
package main

import "fmt"

func main() {
	var a []int = []int{1, 2, 3, 4, 5, 6, 7}
	fmt.Println(a)
}

https://blog.meowrain.cn/api/i/2025/01/27/6kFEI81737907673750715725.avif

数组与切片的区别

2.1 大小和长度

数组是大小固定的,声明时需要指定长度

切片的大小是可变的,长度可以随着元素的增加而增加,不需要在声明的时候指定长度

2.2 传递方式

数组和切片在作为参数传递的时候,都是值传递,但是因为切片和切片的副本的指向的底层数组是相同的。

2.3 初始化

数组需要指定长度并且逐个赋值,也可以使用字面量赋值

切片可以通过字面量或者使用 make 函数进行初始化

1
2
3
  // 使用字面量初始化切片
    slice := []int{1, 2, 3, 4, 5}
    slice2 := make([]int,5)

数组和切片的转换

3.1 从数组生成切片

可以通过切片表达式从数组生成切片,这将创建一个引用数组的切片

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
package main

import "fmt"

func main() {
	var arr [5]int = [5]int{1, 2, 3, 4, 5}
	slice := arr[1:5]
	fmt.Println(slice)

}

https://blog.meowrain.cn/api/i/2025/01/27/V1dE6r1737908159343705594.avif


相关内容

0%