dz视频网站源码分享?视频网站源码怎么操作

本篇文章给大家谈谈dz视频网站源码分享,以及视频网站源码怎么操作对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。

切片的引入

【1】切片(slice)是golang中一种特有的数据类型

【2】数组有特定的用处,但是却有一些呆板(数组长度固定不可变),所以在Go语言的代码里并不是特别常见。相对的切片却是随处可见的,切片是一种建立在数组类型之上的抽象,它构建在数组之上并且提供更强大的能力和便捷。

【3】切片(slice)是对数组一个连续片段的引用,所以切片是一个引用类型。这个片段可以是整个数组,或者是由起始和终止索引标识的一些项的子集。需要注意的是,终止索引标识的项不包括在切片内。切片提供了一个相关数组的动态窗口。

【4】代码:

切片的语法:

var切片名[]类型=数组的一个片段引用

packagemain\n\nimport&34;\nfuncmain(){\n\t//定义数组\n\tvarintarr[6]int=[6]int{3,6,9,1,4,7}\n\t//切片构建在数组之上\n\t//定义一个切片名字为slice,[]动态变化的数组长度不写,int类型,intarr是原数组\n\t//[1:3]切片——切出的一段片段——索引:从1开始,到3结束(不包含3)——[1,3)\n\t//varslice[]int=intarr[1:3]\n\tslice:=intarr[1:3]\n\t//输出数组:\n\tfmt.Println(&34;,intarr)\n\t//输出切片:\n\tfmt.Println(&34;,slice)\n\t//切片元素个数:\n\tfmt.Println(&34;,len(slice))\n\t//获取切片的容量:容量可以动态变化\n\tfmt.Println(&34;,cap(slice))\n}

内存分析

切片有3个字段的数据结构:一个是指向底层数组的指针,一个是切片的长度,一个是切片的容量。

代码:

fmt.Println(&34;,&intarr[1])\n\tfmt.Println(&34;,&slice[0])\n\tslice[1]=16\n\tfmt.Println(&34;,intarr)\n\tfmt.Println(&34;,slice)

内存:

切片的定义

【1】方式1:定义一个切片,然后让切片去引用一个已经创建好的数组。

//定义数组\n\tvarintarr[6]int=[6]int{3,6,9,1,4,7}\n\t//切片构建在数组之上\n\t//定义一个切片名字为slice,[]动态变化的数组长度不写,int类型,intarr是原数组\n\t//[1:3]切片——切出的一段片段——索引:从1开始,到3结束(不包含3)——[1,3)\n\t//varslice[]int=intarr[1:3]\n\tslice:=intarr[1:3]

【2】方式2:通过make内置函数来创建切片。基本语法:var切片名[type=make([],len,[cap])

//定义数组\n\tvarintarr[6]int=[6]int{3,6,9,1,4,7}\n\t//切片构建在数组之上\n\t//定义一个切片名字为slice,[]动态变化的数组长度不写,int类型,intarr是原数组\n\t//[1:3]切片——切出的一段片段——索引:从1开始,到3结束(不包含3)——[1,3)\n\t//varslice[]int=intarr[1:3]\n\tslice:=intarr[1:3]\n\t//输出数组:\n\tfmt.Println(&34;,intarr)\n\t//输出切片:\n\tfmt.Println(&34;,slice)\n\t//切片元素个数:\n\tfmt.Println(&34;,len(slice))\n\t//获取切片的容量:容量可以动态变化\n\tfmt.Println(&34;,cap(slice))\n\n

PS:make底层创建一个数组,对外不可见,所以不可以直接操作这个数组,要通过slice去间接的访问各个元素,不可以直接对数组进行维护/操作

【3】方式3:定一个切片,直接就指定具体数组,使用原理类似make的方式。

fmt.Println(&34;,&intarr[1])\n\tfmt.Println(&34;,&slice[0])\n\tslice[1]=16\n\tfmt.Println(&34;,intarr)\n\tfmt.Println(&34;,slice)

切片的遍历

【1】方式1:for循环常规方式遍历

【2】方式2:for-range结构遍历切片

packagemain\n\nimport&34;\nfuncmain(){\n\tslice:=make([]int,4,20)\n\tslice[0]=11\n\tslice[1]=22\n\tslice[2]=33\n\tslice[3]=44\n\t//方式1:普通循环\n\tfori:=0;i<len(slice);i++{\n\t\tfmt.Printf(&34;,i,slice[i])\n\t}\n\tfmt.Println(&34;)\n\t//方式2:for-range循环:\n\tfori,v:=rangeslice{\n\t\tfmt.Printf(&34;,i,v)\n\t}\n}

切片注意事项

【1】切片定义后不可以直接使用,需要让其引用到一个数组,或者make一个空间供切片来使用

packagemain\n\nimport&34;\nfuncmain(){\n\tvarslice[]int\n\tfmt.Println(slice)\n}

【2】切片使用不能越界。

varintarr[6]int=[6]int{1,2,3,4,5,6}\n\tvarslice2[]int=intarr[1:4]\n\tfmt.Println(slice2[0])\n\tfmt.Println(slice2[1])\n\tfmt.Println(slice2[2])\n\tfmt.Println(slice2[3])

【3】简写方式:

1)varslice=arr[0:end]—-》varslice=arr[:end]

2)varslice=arr[start:len(arr)]—-》varslice=arr[start:]

3)varslice=arr[0:len(arr)]—-》varslice=arr[:]

varslice3[]int=intarr[:3]\n\tfmt.Println(slice3)\n\n\tvarslice4[]int=intarr[3:]\n\tfmt.Println(slice4)\n\n\tvarslice5[]int=intarr[:]\n\tfmt.Println(slice5)

【4】切片可以继续切片

slice6:=slice2[1:2]\n\tfmt.Println(slice6)\n\tslice6[0]=66\n\tfmt.Println(intarr)\n\tfmt.Println(slice2)

【5】切片可以动态增长

packagemain\n\nimport&34;\nfuncmain(){\n\t//定义数组:\n\tvarintarr[6]int=[6]int{1,4,7,3,6,9}\n\t//定义切片:\n\tvarslice=intarr[1:4]\n\tfmt.Println(slice)\n\n\tslice2:=append(slice,88,99)\n\tfmt.Println(slice2)\n\tfmt.Println(slice)\n\t//底层原理:\n\t//1.底层追加元素的时候对数组进行扩容,老数组扩容为新数组:\n\t//2.创建一个新数组,将老数组中的4,7,3复制到新数组中,在新数组中追加88,50\n\t//3.slice2底层数组的指向指向的是新数组\n\t//4.往往我们在使用追加的时候其实想要做的效果给slice追加:\n\tslice=append(slice,88,99)\n\tfmt.Println(slice)\n\t//5.底层的新数组不能直接维护,需要通过切片间接维护操作。\n}

可以通过append函数将切片追加给切片:

slice3:=[]int{50,80}\n\tslice=append(slice,slice3…)\n\tfmt.Println(slice)

【6】切片的拷贝:

packagemain\n\nimport&34;\nfuncmain(){\n\t//定义切片:\n\tvara[]int=[]int{1,4,7,3,6,9}\n\t//再定义一个切片:\n\tvarb[]int=make([]int,10)\n\t//拷贝:\n\t//将a中对应数组中元素内容复制到b中对应的数组中\n\tcopy(b,a)\n\tfmt.Println(b)\n}

参考源码:「链接」

参考个人博客:cyz

dz视频网站源码分享和视频网站源码怎么操作的问题分享结束啦,以上的文章解决了您的问题吗?欢迎您下次再来哦!

Published by

风君子

独自遨游何稽首 揭天掀地慰生平