go语言 切片

一、概述

  • 数组的长度定义之后,就无法进行修改;数组是一种值类型,每次传递都会产生一个副本,当传递的数组比较大的时候,会影响传递效率。很难满足在实际开发中现实需要,因此go语言为我们提供了一种数组切片(slice)来弥补不足
  • 切片并不是数组或者数组的指针,它是通过内部指针和相关的属性引用数组片段,以实现变长方案(扩容)
  • slice并不是珍珍意义上动态数组,而是一种引用类。slice总是指向一个底层的array,slice的声明也可以像array一样,只是不需要声明长度
  • slice声明:[low:high:max]  

        low:数组下标的起点           high:数组下标的结束点(不包括此点)  [arr[low]:arr[high])

         len:长度=high-low             cap:容量=  max-low

    二、切片的长度与容量

package main

import "fmt"

func main() {
	arr := [5]int{11, 22, 33, 0, 0}
	slice := arr[0:3:5]
	fmt.Println("slice=", slice)           //  打印切片
	fmt.Println("len(slice)=", len(slice)) // 长度 3-0
	fmt.Println("cap(slice)=", cap(slice)) // 容量 5-0

	fmt.Println("=========================================")

	slice = arr[1:4:5]
	fmt.Println("slice=", slice)           //  打印切片 从下标1开始
	fmt.Println("len(slice)=", len(slice)) // 长度 4-1
	fmt.Println("cap(slice)=", cap(slice)) // 容量 5-1

}

三、切片的创建

  •      数组 []里面的长度是固定的,是不可以修改的,长度len 和容量cap是不可以修改的
  •      切片 []里面为空,或者... ,切片的长度和容量可以不固定
package main

import "fmt"

func main() {
	// 数组 []里面的长度是固定的,是不可以修改的,长度len 和容量cap是不可以修改的
	arr := [5]int{}
	fmt.Printf("len=%d, =%d\n", len(arr), cap(arr))

	// 切片 []里面为空,或者... ,切片的长度和容量可以不固定
	slice := []int{}
	fmt.Printf("len=%d, cap=%d\n", len(slice), cap(slice))

	// 给切片的末尾追加一个元素
	slice = append(slice, 10)
	fmt.Printf("append:len=%d, cap=%d\n", len(slice), cap(slice))

}
  • 创建方式1: 自动推导,创建的同时进行初始化创建的方式

    创建方式2 : 借助make函数 make(切片类型,长度,容量)创建方式

    创建方式3 没有指定容量,容量和长度一样

package main

import "fmt"

func main() {
	// 创建方式1: 自动推导,创建的同时进行初始化
	slice1 := []int{11, 22, 33, 44, 55}
	fmt.Println("slice1=", slice1)
	// 创建的方式2:借助make函数  make(切片类型,长度,容量)
	slice2 := make([]int, 4, 6)
	fmt.Printf("len=%d, cap=%d\n", len(slice2), cap(slice2))
	// 创建方式3:没有指定容量,容量和长度一样
	slice3 := make([]int, 5)
	fmt.Printf("len=%d, cap=%d\n", len(slice3), cap(slice3))
}

猜你喜欢

转载自blog.csdn.net/m0_38068812/article/details/85014949