go--(Slice)切片的概念

//切片是什么,定义一个arr,定义一个s为arr中的2到6,这个s就是一个切片
arr := [...]int{0,1,2,3,4,5,6,7}
s := arr[2:6]//半开半闭区间,值为[2 3 4 5]
//下面的都是Slice
fmt.Println("arr[2:6]=", arr[2:6])//[2 3 4 5]
fmt.Println("arr[:6]=", arr[:6])//[0 1 2 3 4 5]
fmt.Println("arr[2:]=", arr[2:])//[2 3 4 5 6 7]
fmt.Println("arr[:]=", arr[:])//[0 1 2 3 4 5 6 7]

Slice实际上是array的一个view,是一个视图,对数据进行改动的时候,原始数据也会进行改变,在Slice上面还可以建Slice

//Slice本身没有数据,是对底层array的一个view
arr := [...]int{0,1,2,3,4,5,6,7}
s := arr[2:6]
s [0] = 10//arr的值变为[0 1 10 3 4 5 6 7]

Slice的层叠

//在Slice上面还可以建Slice
s :=arr[2:6]
s = s[:3]
s = s[1:]
s = arr[:]

Slice的扩展

//Slice的扩展

arr := [...]int{0,1,2,3,4,5,6,7}

s1 := arr[2:6]//正常取值[2 3 4 5]

s2 := s1[3:5]//一样可以取到值[5 6]

原因:Slice的可扩展性,在arr中的数组中的数值,s1进行取值的时候是进行下标的对比,实际上的在s1的下标中,4和5是对应arr中的6和7的,只不过没有显示出来,在s2取值的时候也是进行s2的下标对比,所以就取到了隐藏的下标的对应的值(感觉越说越乱)

Slice可以向后扩展,但是不能向前扩展

Slice的实现

底层就是array,ptr是指向数组中值的位置,len是slice视图的数据,cap是底层数组的长度

需要注意,s[i]不可以超越len(s),向后扩展不可以超越底层数组cap(s)

//显示
arr = [...]int{0,1,2,3,4,5,6,7}
s1 = arr[2:6]
s2= s1[3:5]
fmt.PrintIn(s1[:cap(s1)])
fmt.Printf("s1=%v, len(s1)=%d, cap(s1)=%d",s1, len(s1), cap(s1))
fmt.PrintIn("\n")
fmt.PrintIn(s2[:cap(s2)])
fmt.Printf("s2=%v, len(s2)=%d, cap(s2)=%d",s2, len(s2), cap(s2))
fmt.Println("\n")

【笔记】go语言--(Slice)切片的概念的更多相关文章

  1. golang:slice切片

    一直对slice切片这个概念理解的不是太透彻,之前学习python的就没搞清楚,不过平时就用python写个工具啥的,也没把这个当回事去花时间解决. 最近使用go开发又遇到这个问题,于是打算彻底把这个 ...

  2. Go语言核心之美 3.2-slice切片

    Slice(切片)是长度可变的元素序列(与之相应,上一节中的数组是不可变的),每一个元素都有同样的类型.slice类型写作[]T.T是元素类型.slice和数组写法非常像,差别在于slice没有指定长 ...

  3. go 学习笔记之数组还是切片都没什么不一样

    上篇文章中详细介绍了 Go 的基础语言,指出了 Go 和其他主流的编程语言的差异性,比较侧重于语法细节,相信只要稍加记忆就能轻松从已有的编程语言切换到 Go 语言的编程习惯中,尽管这种切换可能并不是特 ...

  4. GO语言slice详解(结合源码)

    一.GO语言中slice的定义 slice 是一种结构体类型,在源码中的定义为: src/runtime/slice.go type slice struct { array unsafe.Point ...

  5. [java学习笔记]java语言核心----面向对象之构造函数

    1.构造函数概念 特点: 函数名与类名相同 不用定义返回值类型 没有具体的返回值 作用:                给对象进行初始化 注意: 默认构造函数 多个构造函数是以重载出现的 一个类中如果 ...

  6. Java学习笔记:语言基础

    Java学习笔记:语言基础 2014-1-31   最近开始学习Java,目的倒不在于想深入的掌握Java开发,而是想了解Java的基本语法,可以阅读Java源代码,从而拓展一些知识面.同时为学习An ...

  7. golang基础---Slice切片

    切片Slice在go语言中是单独的类型(指向底层的数组),不同于python(对可迭代对象操作的工具),注意区分数组和slice的区别 定义一个空slice,格式var s []int,这种既没有长度 ...

  8. go语言---slice

    go语言---slice https://blog.csdn.net/cyk2396/article/details/78893420 一.数组切片的使用: //1.基于数组创建数组切片 var ar ...

  9. go语言之切片即动态数组

    切片和数组的类型有什么不一样,我们可以打印一下,就可以知道两者的区别了,数组是容量的,所以中括号中有容量,切片的动态数组,是没有容量,这是数组和切片最大的区别 test8_4 := [20] int ...

  10. 3.9 Go Slice切片

    3.9 Go Slice切片 Go语言切片(Slice) 切片是可动态变化的序列,是对数组的引用,引用类型,遵循引用传递的机制 slice类型写作[ ]T,T是slice元素类型,var s1 []i ...

随机推荐

  1. 将谷歌chrome浏览器主题变黑的方法

    两个步骤: 第一: 桌面找到google chrome图标右键->属性,在后面加上: --force-dark-mode (注意有空格) 第二: 1.浏览器地址输入chrome://flags/ ...

  2. 29_SDL多线程与锁机制

    目录 一.简介 二.代码实现: 2.1.声明 2.2.创建锁.消费者 2.3.销毁 2.4.实现生产者逻辑 2.5.实现销毁者逻辑 2.6.创建生产者 三.分装SDL锁机制 condmutex.h c ...

  3. 专访OV季军|毕业转为freelancer,他如何斩获大量CG奖项?

    "新锐先锋,玩转未来"--首届实时渲染3D动画创作大赛由瑞云科技主办,英伟达.青椒云.3DCAT实时渲染云协办,戴尔科技集团.Reallusion.英迈.万生华态.D5渲染器.中视 ...

  4. ViewStub你真的了解吗

    目录介绍 01.什么是ViewStub 02.ViewStub构造方法 03.inflate()方法解析 04.WeakReference使用 05.ViewStub为何无大小 06.ViewStub ...

  5. 记录--20行js就能实现逐字显示效果???-打字机效果

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 效果演示 横版 竖版 思路分析 可以看到文字是一段一段的并且独占一行,使用段落标签p表示一行 一段文字内,字是一个一个显示的,所以这里每一 ...

  6. 工作记录:Vue3.0新特性

    简单对比 Vue2.x 与 Vue3.x 响应式 Vue2 使用Object.defineProperty劫持对象的属性 Vue3 使用Proxy 直接代理对象 由于Object.defineProp ...

  7. 记录--Vue3 封装 ECharts 通用组件

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 按需导入的配置文件 配置文件这里就不再赘述,内容都是一样的,主打一个随用随取,按需导入. import * as echarts from ...

  8. 记录--记一次前端CSS升级

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 目前平台前端使用的是原生CSS+BEM命名,在多人协作的模式下,容易出现样式冲突.为了减少这一类的问题,提升研效,我调研了业界上主流的7种 ...

  9. mybatis in 参数动态拼接

    // 接口 List<SysUser> findByIdList(List<Integer> idList); //xml <select id="findBy ...

  10. CDN 引入 axios 和 qs 及其使用方法

    一些小项目,没必要搭建脚手架,直接以CDN的方式引入 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN&quo ...