数组/切片以及扩容的概念 | Go语言基础
Posted pymkl
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数组/切片以及扩容的概念 | Go语言基础相关的知识,希望对你有一定的参考价值。
package main // 当前包声明 func main() { // 程序的入口 // 数组 // 存储一组相同数据类型的数据结构 // 连续开辟内存,数组的地址其实是数组的首地址 // 一旦定义,大小不能改变 // 创建数组 ==> 访问数组(赋值,取值) var arr [4] int arr[0] = 1 arr[1] = 2 arr[2] = 3 arr[3] = 4 fmt.Println(arr) // 未赋值为默认值 // 遍历数组 for i:=0;i<len(arr);i++ // len()获取长度,cap()获取容器存储的最大数量,对于数组len()与cap()相同 fmt.Println(arr[i]) } // range 取下标与值 arr := [10]int{1,2,3,4,5,6,7,8,9,10} // "_"处理不需要的返回值 for _, v := range arr{ fmt.Println(v) } // 数组其他创建方式 var b = [4] int {1,2,3,4} fmt.Println(b) // 根据下标:值 var c = [5] int {1:1, 3:2} fmt.Println(c) // 用"..." 表示数组长度推断 //d := [...] string {"1", "2", "3"} //fmt.Println(d, " ", len(d)) // 值类型:存储的是数值本身; 引用类型:存储数据的内存地址 // 切片 // 变长数组(引用类型的容器,指向底层数组),不写长度就是切片 // 创建切片 var a []int fmt.Println(a) var b = [] int {1,2,3} fmt.Println(b) // make a := make([]int,3,8) // 类型,长度,容量 fmt.Println(a) // 添加元素 var tempSlice [] int tempSlice = append(tempSlice,1,2,3,4,5) fmt.Println(tempSlice) mySlice := []int{1,2,3} tempSlice = append(tempSlice, mySlice...) // 添加切片中的元素`...` fmt.Println(tempSlice) // 根据数组创建切片,地城数组就是当前的数组 // 长度是从start到end切割的数据量,但是容量是start到数组的末尾. a := [...]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10} mySlice := a[0:5] // start:end fmt.Printf("%T %v", a, a) fmt.Printf("%T %v", mySlice, mySlice) // 扩容 // 当向切片中添加数据时,如果没有超过容量,直接添加,如果超过容量,自动扩容(成倍增长) // 当超过容量,切片指向的就不再原来的数组,而是内存地址中开辟了一个新的数组. }
以上是关于数组/切片以及扩容的概念 | Go语言基础的主要内容,如果未能解决你的问题,请参考以下文章