第8章:切片

news2024/12/28 19:17:09

1.切片的引入

【1】切片(slice)是golang中一种特有的数据类型
【2】数组有特定的用处,但是却有一些呆板(数组长度固定不可变),所以在 Go 语言的代码里并不是特别常见。相对的切片却是随处可见的,切片是一种建立在数组类型之上的抽象,它构建在数组之上并且提供更强大的能力和便捷。
【3】切片(slice)是对数组一个连续片段的引用,所以切片是一个引用类型。这个片段可以是整个数组,或者是由起始和终止索引标识的一些项的子集。需要注意的是,终止索引标识的项不包括在切片内。切片提供了一个相关数组的动态窗口。
【4】代码:
切片的语法:
var 切片名 []类型 = 数组的一个片段引用
在这里插入图片描述

2.内存分析

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

代码:
在这里插入图片描述
内存:

在这里插入图片描述

3.切片的定义

【1】方式1:定义一个切片,然后让切片去引用一个已经创建好的数组。
在这里插入图片描述
【2】方式2:通过make内置函数来创建切片。基本语法: var切片名[type = make([], len,[cap])
在这里插入图片描述
PS : make底层创建一个数组,对外不可见,所以不可以直接操作这个数组,要通过slice去间接的访问各个元素,不可以直接对数组进行维护/操作
【3】方式3:定一个切片,直接就指定具体数组,使用原理类似make的方式。
在这里插入图片描述

4.切片的遍历

【1】方式1:for循环常规方式遍历
【2】方式2:for-range 结构遍历切片

package main
import "fmt"
func main(){
        //定义切片:
        slice := make([]int,4,20)
        slice[0] = 66
        slice[1] = 88
        slice[2] = 99
        slice[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)
        }
}

5.切片的注意事项

【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,3
        fmt.Println(len(slice))
        slice2 := append(slice,88,50)
        fmt.Println(slice2) //[4 7 3 88 50]
        fmt.Println(slice)
        //底层原理:
        //1.底层追加元素的时候对数组进行扩容,老数组扩容为新数组:
        //2.创建一个新数组,将老数组中的4,7,3复制到新数组中,在新数组中追加88,50
        //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)
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/154613.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AVL平衡树

前置知识 平衡树 平衡树指的是任意节点的子树的高度差都小于等于 111 的二叉查找树。 因为他是平衡的&#xff0c;我们做树上的操作就可以降到 O(logn)O(log_n)O(logn​) 的时间复杂度。 AVL平衡树 因为对于树有可能进行插入或删除操作&#xff0c;使得树有可能不平衡&…

抓取HTTPS失败和乱码

第一步&#xff1a;电脑安装SSL证书 选择 “Help” -> “SSL Proxying” -> “Install Charles Root Certificate”&#xff0c;如果设置了安全防护&#xff0c;会ranging输入系统的帐号密码 这时开始安装charles证书&#xff0c;一路点击下一步即可 第二步&#xf…

【MySQL进阶教程】锁的详细介绍

前言 本文为 【MySQL进阶教程】锁 相关知识&#xff0c;下边将对锁的概述&#xff0c;全局锁&#xff08;包含全局锁的介绍&#xff0c;语法与特点&#xff09;&#xff0c;表级锁&#xff08;包含表级锁的介绍&#xff0c;表锁&#xff0c;元数据锁&#xff0c;意向锁&#xf…

第一封信|感觉孤独?找个借口联系

首发&#xff1a;https://bornforthis.cn/letter/2023/01.html 孤独不等于寂寞 你好&#xff0c;我是悦创。 这里是《悦创来信去无方向的信》&#xff0c;给你邮寄的第一封信&#xff0c;信的主题是“孤独 vs 寂寞”&#xff0c;很高兴你拆开此信。 一到冬季&#xff0c;情…

10条必备的markdown常用语法

10条必备的markdown常用语法markdown笔记写起来会比较方便&#xff0c;而且也方便复制&#xff0c;下面我总结一下常用的markdown常用语法可能不同的程序markdown语法不太一样&#xff0c;但是都差不多的1.标题一级标题、二级标题等等这个不多说了。最多支持六级标题## 内容1 …

鲲志说:向我跌宕起伏,喜忧参半的2022致敬!

今天是2022的倒数第二天&#xff0c;就着CSDN的活动正好为自己做一个年度总结&#xff0c;也确实需要做一个年度总结来正式和过去的一年道个别 回想这一年&#xff0c;确实经历了很多&#xff0c;寒冬裁员、千里相赴见双方父母、成功夺冠&#x1f411;。。。成年人的世界确实很…

Web3中文|2023加密圈开年首雷?美国当局调查Genesis母公司DCG

据彭博社周五报道&#xff0c;纽约联邦检察官和美国证券交易委员会&#xff08;SEC&#xff09;正在调查数字货币集团&#xff08;DCG&#xff09;在其借贷子公司Genesis的内部转账问题。 报道援引知情人士的话称&#xff0c;DCG已收到纽约东区检察官关于提供文件和面谈的要求…

ebpf中的percpu map的注意事项与剖析

1 背景 故事还要从一次翻车现场说起。 为了统计各个CPU上的系统调用数据按照cpu分别进行统计&#xff0c;我参考了kernel Documents中关于percpu map的一段原话&#xff1a; Values stored in BPF_MAP_TYPE_ARRAY can be accessed by multiple programs across different CPUs.…

python转C++格式学习笔记

我是主写python的&#xff0c;但是感觉算法上想精进的话&#xff0c;还是得用c写&#xff0c;所以笔记主要记录的是c与python不太一样的地方&#xff0c;听的是y总的算法基础课&#xff0c;结合y总的讲义&#xff0c;白框里面是自己的理解&#xff0c;大家取精华&#xff0c;去…

已解决pip使用阿里云镜像安装第三方模块失败

已解决&#xff08;pip使用阿里云镜像安装第三方模块失败&#xff09;ERROR: Could not find a version that satisfies the requirement xpinyin (from versions: none) ERROR: No matching distribution found for xpinyin WARNING: The repository located at mirrors.aliyu…

2023年,我们还需要一部游戏手机吗?

这世界上本没有路&#xff0c;走的人多了&#xff0c;也便成了路。可实际情况全都如此吗&#xff1f;眼下&#xff0c;游戏手机的路似有还无。2022年12月下旬&#xff0c;刚晋升为小米集团总裁的卢伟冰&#xff0c;在宣传自家的Redmi K60系列时&#xff0c;称“K60宇宙&#xf…

npm无法使用的坑及其解决

1.&#xff08;如果是第一次可以跳过这个步骤&#xff09;如果你是下载了nodejs的话,那么请以此删除一下的文件:(他们可能有也可能没有&#xff0c;但有的话把它们删除) C:\Program Files (x86)\nodejs C:\Program Files\nodejs C:\Users{User}\AppData\Roaming\npm&#xff08…

【强训】Day05

努力经营当下&#xff0c;直至未来明朗&#xff01; 文章目录一、选择二、编程1. 统计回文:sparkles: 2. 连续最大和[dp]答案1. 选择2. 编程普通小孩也要热爱生活&#xff01; 一、选择 下面的程序 编译运行后&#xff0c;在屏幕上显示的结果是&#xff08;&#xff09; pub…

LWIP(二)——LWIP有3种编程接口,RAW、NETCONN和SOCKET

目录 1. RAW 2. NETCONN 3、SOCKET LWIP有3种编程接口&#xff0c;RAW、NETCONN和SOCKET。它们的易用性从左到右依次提高&#xff0c;而执行效率从左到右依次降低&#xff0c;用户可以根据实际情况&#xff0c;平衡利弊&#xff0c;选择合适的 API 进行网络应用程序的开发。…

性价比高的香港物理服务器怎么选用?

​  从事跨境业务&#xff0c;对于网络流量大且速度、安全网络要求高的企业&#xff0c;通常建议选用香港物理服务器。物理服务器以非共享方式租给一个特定的客户&#xff0c;比较满足一些企业的高要求。当然&#xff0c;在进行比较并选择性价比高的香港物理服务器时&#xf…

Flink 知识点整理及八股文问题<第二、三部分 Flink快速上手和部署>

本篇为Flink的第二、三部分&#xff0c;Flink快速上手和Flink部署&#xff0c;全篇参考自 尚硅谷2022版1.13系列 整个系列的目录如下&#xff1a; &#x1f49a;<一>Flink简介 &#x1f49a;<二>Flink快速上手 &#x1f49a;<三>Flink 部署 &#x1f49a;&l…

Revit标注墙偏移如何简便标注呢?万能标注?

一、Revit标注墙偏移如何简便标注呢? 1、如果墙定位线是核心层中心线&#xff0c;现在要标注墙偏移如何简便标注呢? 遇到上述问题大家可能想到的办法是用TAB键去选择墙的内外边缘。其实有更简便的方法&#xff0c;如图1所示。 红色框选部分是选项栏&#xff0c;当使用对齐尺寸…

JDBC高级——主键回显、批量插入、事务操作

自增主键回显 一般在插入数据时&#xff0c;设置主键为自增&#xff0c;然后我们就不用去维护这个主键值&#xff0c;其他的级联表可能以这个主键作为外键或参考&#xff0c;所以我们要拿到插入数据的主键值&#xff0c;这就是主键回显。 如何获取数据库自增的主键值&#xff…

自己写一个简单的工作流引擎V2

上一篇文中我们实现了顺序的工作流&#xff0c;对于多分支的工作流如下&#xff0c;该如何实现呢&#xff1f; 小明提交了一个申请单&#xff0c;然后经过经理审批&#xff0c;如果通过&#xff0c;发邮件通知&#xff0c;不通过&#xff0c;则打回重新填写申请单&#xff0c;…

计算机体系结构 | 函数栈帧 | 栈帧的创建与销毁讲解 | 篡改函数的返回地址

文章目录前言预备知识demo及其汇编代码汇编代码讲解返回值篡改&#xff08;111 ???&#xff09;前言 复习时遇到一些问题&#xff0c;可能是关于左值右值的概念理解不够透彻&#xff0c;于是转头去研究左值右值的问题&#xff0c;但是想要参透左右值&#xff0c;我又觉得需…