【Golang切片】

news2024/11/19 3:28:35

切片

  • 切片的引入
  • 内存分析
  • 切片的定义
  • 切片的遍历
  • 切片注意事项

切片的引入

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

内存分析

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

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

切片的定义

【1】方式1:定义一个切片,然后让切片去引用一个已经创建好的数组。
在这里插入图片描述

【2】方式2:通过make内普函数来创建切片。
基本语法:var 切片名 [type = make([ ],len[cap])
在这里插入图片描述
PS:make底层创建一个数组,对外不可见,所以不可以直接操作这个数组,要通过slice去间接的访问各个元素,不可以直接对数组进行维护/操作

【3】方式3:定一个切片,直接就指定具体数组,使用原理类似make的方式。
在这里插入图片描述

在使用切片字面量时,没有显式指定容量的情况下,切片的容量与切片的长度相同。

切片的遍历

【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)
	}
}

切片注意事项

【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/1472442.html

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

相关文章

第六十八天 APP攻防-XposedFridaHook证书校验反代理代理转发

第68天 APP攻防-Xposed&Frida&Hook&证书校验&反代理&代理转发 知识点&#xff1a; 1、APP防代理绕过-应用&转发 2、APP证书校验类型-单向&双向 3、APP证书校验绕过-Frida&XP框架等 章节点&#xff1a; 1、信息收集-应用&资产提取&权…

游戏 CP 专访| InOutPath 技术干货分享!

“ 编辑语&#xff1a;STEAM 上的 3D 解密游戏《InOutPath》以其清新的画面&#xff0c;独特的玩法&#xff0c;受到了广大 STEAM 玩家&#xff0c;以及 Cocos 开发者们的关注。今天有幸邀请到了这款游戏的开发商&#xff0c;为大家做一次技术分享。希望能够对在用 Cocos Creat…

嵌入式中逻辑分析仪基本操作方法

前期准备 1.一块能触摸的屏对应的主板机 2.逻辑分析仪对应的软件工具 3.对应的拓展板 4.确定拓展板的引脚分布情况 第一步&#xff1a;逻辑分析仪j基本操作 1.数据捕捉需要先进行对应软件安装,并按照需求进行配置 2.这里以A20为例:此手机使用显示驱动芯片CST148,触摸屏分辨…

SImpAl

output matrix M&#xff0c;Curriculum using w ( x t , f , h ) w(x_t, f, h) w(xt​,f,h) 辅助信息 作者未提供代码

数学建模论文、代码百度网盘链接

1.[2018中国大数据年终总决赛冠军] 金融市场板块划分与轮动规律挖掘与可视化问题 2.[2019第九届MathorCup数模二等奖] 数据驱动的城市轨道交通网络优化策略 3.[2019电工杯一等奖] 露天停车场停车位的优化设计 4.[2019数学中国网络数模一等奖] 基于机器学习的保险业数字化变革…

STM32控制数码管从0显示到99

首先 先画电路图吧&#xff01;打开proteus&#xff0c;导入相关器件&#xff0c;绘制电路图。如下&#xff1a;&#xff08;记得要保存啊&#xff01;发现模拟一遍程序就自动退出了&#xff0c;有bug&#xff0c;我是解决不了&#xff0c;所以就是要及时保存&#xff0c;自己重…

设计模式(七)装饰模式

相关文章设计模式系列 1.装饰模式简介 装饰模式介绍 装饰模式是结构型设计模式之一&#xff0c;不必改变类文件和使用继承的情况下&#xff0c;动态地扩展一个对象的功能&#xff0c;是继承的替代方案之一。它是通过创建一个包装对象&#xff0c;也就是装饰来包裹真实的对象…

使用ClickHouse进行SQL动态列选择

本文字数&#xff1a;4073&#xff1b;估计阅读时间&#xff1a;11 分钟 作者&#xff1a;Mark Needham 审校&#xff1a;庄晓东&#xff08;魏庄&#xff09; 本文在公众号【ClickHouseInc】首发 在处理包含大量列的数据集时&#xff0c;我们通常希望在其中的一部分列上做聚合…

模型评估方式

文章目录 一、有监督-分类模型1、混淆矩阵2、分类模型的精度和召回率3、ROC曲线与AUC 二、有监督-回归模型1、均方误差MSE2、 R 2 R^2 R2决定系数3、回归模型代码示例 三、无监督模型1、kmeans求解最优k值的方法&#xff1a;轮廓系数、肘部法2、GMM的最优组件个数&#xff1a;A…

基于springboot的新闻资讯系统的设计与实现

**&#x1f345;点赞收藏关注 → 私信领取本源代码、数据库&#x1f345; 本人在Java毕业设计领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目希望你能有所收获&#xff0c;少走一些弯路。&#x1f345;关注我不迷路&#x1f345;**一 、设计说明 1.1 课题背景…

JavaAPI常用类03

目录 java.lang.Math Math类 代码 运行 Random类 代码 运行 Date类/Calendar类/ SimpleDateFormat类 Date类 代码 运行 Calendar类 代码 运行 SimpleDateFormat类 代码一 运行 常用的转换符 代码二 运行 java.math BigInteger 代码 运行 BigDecimal …

防御保护----内容安全

八.内容安全--------------------------。 IAE引擎&#xff1a; IAE引擎里面的技术&#xff1a;DFI和DPI技术--- 深度检测技术 DPI --- 深度包检测技术--- 主要针对完整的数据包&#xff08;数据包分片&#xff0c;分段需要重组&#xff09;&#xff0c;之后对 数据包的内容进行…

设计模式六:策略模式

1、策略模式 策略模式定义了一系列的算法&#xff0c;并将每一个算法封装起来&#xff0c;使每个算法可以相互替代&#xff0c;使算法本身和使用算法的客户端分割开来&#xff0c;相互独立。 策略模式的角色&#xff1a; 策略接口角色IStrategy&#xff1a;用来约束一系列具体…

Qt QWiget 实现简约美观的加载动画 第三季

&#x1f603; 第三季来啦 &#x1f603; 这是最终效果: 只有三个文件,可以直接编译运行 //main.cpp #include "LoadingAnimWidget.h" #include <QApplication> #include <QVBoxLayout> #include <QGridLayout> int main(int argc, char *argv[]…

架构设计:流式处理与实时计算

引言 随着大数据技术的不断发展&#xff0c;流式处理和实时计算在各行各业中变得越来越重要。那么什么是流式处理呢&#xff1f;我们又该怎么使用它&#xff1f;流式处理允许我们对数据流进行实时分析和处理&#xff0c;而实时计算则使我们能够以低延迟和高吞吐量处理数据。本…

axure9.0 工具使用思考

原型设计软件【AxureRP】快速原型设计工具原型设计软件【AxureRP】快速原型设计工具原型设计软件【AxureRP】快速原型设计工具原型设计软件【AxureRP】快速原型设计工具原型设计软件【AxureRP】快速原型设计工具原型设计软件【AxureRP】快速原型设计工具原型设计软件【AxureRP】…

linux中查找进程cpu使用率高的原因

查询哪些进程/线程cpu使用率高 使用 top 命令&#xff1a; 在终端中运行 top 命令&#xff0c;它会实时显示系统中正在运行的进程和线程&#xff0c;并按照 CPU 使用率进行排序。你可以按 Shift P 键按照 CPU 使用率对进程进行排序&#xff0c;或者按 Shift T 键按照线程进…

nginx基础模块配置详解

目录 一、Nginx相关配置 1、nginx配置文件 2、nginx模块 二、nginx全局配置 1、关闭版本或修改版本 1.1 关闭版本 1.2 修改版本 2、修改nginx启动的子进程数 3、cpu与worker进程绑定 4、PID路径 5、nginx进程的优先级 6、调试worker进程打开文件的个数 7、nginx服…

idea 设置启动类置底/设置folders置顶

在新建项目的时候启动类外和swagger交叉展示在包之间&#xff0c;缺少美观&#xff0c;这在一个有洁癖的程序员眼里是非常不能接受的。在网上大量检索相关的设置&#xff0c;一无所获。但是苍天犹怜&#xff0c;经过我一上午的探索&#xff0c;终于在一个犄角旮旯里面找到了这个…

【可实战】被测系统业务架构、系统架构、技术架构、数据流、业务逻辑分析

一、为什么要学习 更深的理解业务逻辑&#xff08;公司是做什么的&#xff1f;它最重要的商务决策是什么&#xff1f;它里面的数据流是怎么做的&#xff1f;有哪些业务场景&#xff1f;考验你对这家公司、对所负责业务的熟悉程度。公司背后服务器用什么软件搭建的&#xff1f;…