欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Go 切片

程序员文章站 2024-01-29 17:44:46
...

目录:

  1. 切片定义
  2. 修改切片
  3. 切片的长度和容量
  4. 通过make函数来初始化切片
  5. 切片的函数传递类型

切片定义

切片是有数组建议的一种方便、灵活且功能强大的包装(wrapper)。切片本身不拥有任何数据,它只是对现有数组的引用

创建一个切片

  • 第一种方式
package main

import "fmt"

func main() {
	a:=[9]int{1,2,43}
	fmt.Println(a)
	// 基于数组a定义一个b切片,顾头不顾尾
	b:=a[1:3]
	fmt.Println(b)
}
  • 第二种
package main

import "fmt"

func main() {
	a := []int{1, 2, 43}
	a = append(a, 1)
	fmt.Println(a)
}


修改切片

切片本身不拥有任何数据。它试试底层数组的一种表示。对切片所做的任何修改都会梵音在底层数组中。

Go 切片



切片的长度和容量

切片的长度是切片中的元素数。切片的容量是从创建切片索引开始的底层数组中元素数

package main

import "fmt"

func main() {
	a:=[5]int{1,2,43,0,0}
	b:=a[1:3]
	fmt.Println(len(b))   //2
	//查看容量
	fmt.Println(cap(b))   //4
	b=append(b,10)
	b=append(b,11)
	b=append(b,12)
	fmt.Println(len(b))  //5
	//查看容量(容量如果不够了,每次都会翻倍)
	fmt.Println(cap(b)) //8
}

输出结果:

// 当前切片元素个数
2
// 当前切片容量
4
// append三个元素后切片元素个数
5
// append三个元素后切片容量
8

回到目录



通过make函数来初始化切片

package main

import "fmt"

func main() {
	a := make([]int, 5, 10)
	fmt.Println(len(a))
	fmt.Println(cap(a))
	a = append(a, 1)
	fmt.Println(len(a))
	fmt.Println(cap(a))
}

输出:

5
10
6
10


切片的函数传递类型

package main

import "fmt"

func main() {
	a := make([]int, 5, 5)
	fmt.Println(a)
	test(a)
	fmt.Println(a)
}

func test(a []int)  {
	a[0] = 999
	fmt.Println(a)
}

结果:(引用类型)

[0 0 0 0 0]
[999 0 0 0 0]
[999 0 0 0 0]

回到目录



内存优化,copy函数

当切片的底层数组很长时,可以使用copy函数来优化内存使用


可将一个切片复制到另一个切片,这样原本底层的数组可以被垃圾回收

package main

import "fmt"

func main() {
	a := [10000]int{1, 2, 3, 4, 5}
	b := a[0:3]
	c := make([]int, 5, 5)
	copy(c,b)
	fmt.Println(c)
}