Go数组和切片

2019-12-26linuxGo

数组和切片

数组和切片是Go语言中常见的数据结构。两者具有相同之处,也有不同之处。

图注

数组

Go数组是长度固定,类型相同的数据序列

  • 初始化数组

数组声明时候方括号内需要写明数组的长度或者使用(...)符号自动计算长度

var arr[7]int
var arr2=[...]int{0, 1, 2 ,3 ,4 ,5 ,6}

其中

arr 是数组名称
7 是数组长度
int 是数组类型

在函数中简单初始化

arr := [5]int{}

如果数组中的元素没有定义,元素值是类型的零值

  • 访问数组中的元素,数组的索引是从0开始的
package main

import (
	"fmt"
)

func main() {
	var arr [6]int
	fmt.Println(arr[1])
}

程序输出

0
  • 修改数组元素的值,指定索引的值,就能修改索引对应元素的值
package main

import "fmt"

func main() {
	var arr [7]int
	for i := 0; i < 7; i++ {
		arr[i] = i
	}
	fmt.Println(arr)
}

程序输出

[0 1 2 3 4 5 6]
  • 获取数组长度
package main

import "fmt"

func main() {
	var arr [7]int
	for i := 0; i < 7; i++ {
		arr[i] = i
	}
	fmt.Println(len(arr))
}

程序输出

7

切片

Go切片是长度可变,类型相同的数据序列。切片可以追加元素并会在切片容量不足时进行扩容。

  • 初始化切片

切片不需要指定数组的长度,使用make,并且只指定切片长度,这个时候切片长度和容量相同,或者同时指定切片的长度和容量。

package main

import (
	"fmt"
)

func main() {
	slice := make([]int, 1, 1)
	fmt.Println(slice)
}

程序输出

[0]
  • 切片扩容

可以使用append函数,扩容切片

package main

import (
	"fmt"
)

func main() {
	s := make([]int, 2, 2)
	fmt.Printf("切片是: %v\n", s)
	fmt.Printf("长度是:%d,容量是:%d\n", len(s), cap(s))
	s = append(s, 1)
	fmt.Printf("切片是: %v\n", s)
	fmt.Printf("长度是:%d,容量是:%d\n", len(s), cap(s))
}

程序输出

切片是: [0 0]
长度是:2,容量是:2
切片是: [0 0 1]
长度是:3,容量是:4
Last Updated 8/21/2026, 3:57:15 AM