网站没有做301的后果是什么,wordpress白屏问题,外贸建站模板价格,网站怎么做h5支付宝支付切片 切片的引入内存分析切片的定义切片的遍历切片注意事项 切片的引入
【1】切片#xff08;slice#xff09;是golang中一种特有的数据类型 【2】数组有特定的用处#xff0c;但是却有一些呆板#xff08;数组长度固定不可变#xff09;#xff0c;所以在Go语言的代码… 切片 切片的引入内存分析切片的定义切片的遍历切片注意事项 切片的引入
【1】切片slice是golang中一种特有的数据类型 【2】数组有特定的用处但是却有一些呆板数组长度固定不可变所以在Go语言的代码里并不是特别常见。相对的切片却是随处可见的切片是一种建立在数组类型之上的抽象它构建在数组之上并且提供更强大的能力和便捷。 【3】切片slice是对数组一个连续片段的引用所以切片是一个引l用类型。这个片段可以是整个数组或者是由起始和终止索引标识的一些项的子集。需要注意的是终止索引标识的项不包括在切片内。切片提供了一个相关数组的动态窗口。 【4】代码 切片的语法 var 切片名 [ ]类型 数组的一个片段引用
内存分析
切片有3个字段的数据结构一个是指向底层数组的指针一个是切片的长度一个是切片的容量。
代码 内存
切片的定义
【1】方式1定义一个切片然后让切片去引用一个已经创建好的数组。
【2】方式2通过make内普函数来创建切片。 基本语法var 切片名 [type make[ ]len[cap]) PSmake底层创建一个数组对外不可见所以不可以直接操作这个数组要通过slice去间接的访问各个元素不可以直接对数组进行维护/操作
【3】方式3定一个切片直接就指定具体数组使用原理类似make的方式。
在使用切片字面量时没有显式指定容量的情况下切片的容量与切片的长度相同。
切片的遍历
【1】方式1for循环常规方式遍历 【2】方式2for-range结构遍历切片
package main
import fmt
func main(){//定义切片slice : make([]int,4,20)slice[0] 66slice[1] 88slice[2] 99slice[3] 100//方式1普通for循环for i : 0;i len(slice);i {fmt.Printf(slice[%v]%v \t,i,slice[i])}fmt.Println(\n--------------------------------)//方式2:for-range循环for i,v : range slice {fmt.Printf(下标%v,元素:%v\n,i,v)}
}切片注意事项
【1】切片定义后不可以直接使用需要让其引用到一个数组或者make一个空间供切片来使用
【2】切片使用不能越界。
【3】简写方式 1) var slice arr[0:end] ----》 var slice arr[:end] 2) var slice arr[start:len(arr)] ----》 var slice arr[start:] 3) var slice arr[0:len(arr)] —》 var slice arr[:]
【4】切片可以继续切片
【5】切片可以动态增长
package main
import fmt
func main(){//定义数组var intarr [6]int [6]int{1,4,7,3,6,9}//定义切片var slice []int intarr[1:4] //4,7,3fmt.Println(len(slice))slice2 : append(slice,88,50)fmt.Println(slice2) //[4 7 3 88 50]fmt.Println(slice)//底层原理//1.底层追加元素的时候对数组进行扩容老数组扩容为新数组//2.创建一个新数组将老数组中的47,3复制到新数组中在新数组中追加8850//3.slice2底层数组的指向指向的是新数组//4.往往我们在使用追加的时候其实想要做的效果给slice追加slice append(slice,88,50)fmt.Println(slice)//5.底层的新数组不能直接维护需要通过切片间接维护操作。
}可以通过append函数将切片追加给切片
【6】切片的拷贝
package main
import fmt
func main(){//定义切片var a []int []int{1,4,7,3,6,9}//再定义一个切片var b []int make([]int,10)//拷贝copy(b,a)//将a中对应数组中元素内容复制到b中对应的数组中fmt.Println(b)
}