【golang中的切片的相关知识点】[ ] slice

news2024/11/28 4:48:21

golang-切片

  • 切片的定义和初始化
  • 切片的内存分析
  • 切片的操作
    • 获取长度和容量
    • 追加元素
    • 复制切片
  • 切片的遍历
  • 切片的特性
  • 总结

Golang中的切片是一种灵活且强大的数据结构,它可以动态地增长和缩小。切片是基于数组的抽象,它提供了更方便的操作和更灵活的内存管理。在本文中,我们将全面分析Golang中切片的相关知识点,以帮助读者清晰认识切片的用法。

切片的定义和初始化

在Golang中,切片的定义形式为:var sliceName []dataType,其中sliceName是切片的名称,dataType是切片中元素的数据类型。切片可以通过make函数来初始化,也可以通过对数组进行切片操作来创建。例如,下面是两种切片的初始化方式的示例:
在这里插入图片描述

//切片定义方式1
//从数组中截取
var myArray = [10]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
var mySlice := myArray[2:7]

//定义方式二
//通过make
slice := make([]int,5,10)

//定义方式三
//初始化 []int{....}
slice2 := []int{12,457,78,88}


// 使用make函数初始化切片
var mySlice = make([]int, 5, 10)

// 对数组进行切片操作创建切片
var myArray = [10]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
var mySlice = myArray[2:7]

在这个示例中,我们首先使用make函数初始化了一个包含5个整数的切片mySlice,并指定了切片的容量为10。然后,我们使用数组myArray进行切片操作,创建了一个包含索引2到索引6的元素的切片mySlice。
在这里插入图片描述

切片的内存分析

在这里插入图片描述
在这里插入图片描述

切片的操作

Golang中的切片支持多种操作,包括获取长度和容量、追加元素、复制切片等。

获取长度和容量

获取长度和容量:切片的长度指的是切片中实际存储的元素数量,可以使用len函数来获取。切片的容量指的是切片底层数组的容量,可以使用cap函数来获取。

// 使用make函数初始化切片
var mySlice = make([]int, 5, 10)

// 对数组进行切片操作创建切片
var myArray = [10]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
var mySlice = myArray[2:7]
//返回切片长度
len(mySlice )
//返回切片容量
cap(mySlice )

追加元素

追加元素:可以使用append函数向切片中追加元素。当切片的容量不足以容纳新的元素时,append函数会自动扩容切片。

// 使用make函数初始化切片
var mySlice = make([]int, 5, 10)

// 对数组进行切片操作创建切片
var myArray = [10]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
var mySlice = myArray[2:7]
//切片追加
newslice := append(mySlice ,12,45,78)

在这里插入图片描述

复制切片

复制切片:可以使用copy函数将一个切片的元素复制到另一个切片中。

// 使用make函数初始化切片
var a= make([]int, 5, 10)

// 对数组进行切片操作创建切片
var myArray = [10]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
var a= myArray[2:7]
var b= make([]int, 10, 10)
//切片赋值 把 a复制到b去
copy(b,a)

在这里插入图片描述

切片的遍历

在Golang中,可以使用for循环来遍历切片中的元素。下面是一个简单的示例:

var mySlice = []int{1, 2, 3, 4, 5}
//方式1
for i := 0; i < len(mySlice); i++ {
    fmt.Println(mySlice[i])
}
//方式二
for k,v := range mySlice {
	fmt.Println(k)
	fmt.Println(v)
	 fmt.Println(mySlice[k])
}

在这个示例中,我们定义了一个包含5个整数的切片mySlice,并使用for循环遍历切片中的每个元素,并使用fmt.Println函数将其打印出来。

切片的特性

切片有一些特性需要注意:

切片是引用类型:切片是对底层数组的引用,多个切片可以引用同一个底层数组。这意味着对切片的修改会影响到底层数组和其他引用该底层数组的切片。

切片的扩容:当切片的容量不足以容纳新的元素时,切片会自动扩容。扩容的策略是按照一定的规则重新分配更大的底层数组,并将原有的元素复制到新的底层数组中。

切片的传递:切片作为函数参数时,是按引用传递的。这意味着在函数内部对切片的修改会影响到函数外部的切片。

总结

切片是Golang中灵活且强大的数据结构,它可以动态地增长和缩小。切片的定义和初始化相对简单,可以使用make函数初始化切片,也可以通过对数组进行切片操作来创建切片。切片支持多种操作,包括获取长度和容量、追加元素、复制切片等。切片的遍历可以使用for循环来实现。切片有一些特性需要注意,如切片是引用类型、切片的扩容和切片的传递。通过深入了解切片的相关知识点,我们可以更好地理解和使用Golang这种灵活的编程语言。

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

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

相关文章

系列五、RocketMQ集群搭建(双主双从)

一、概览 二、集群特点 2.1、NameServer NameServer是一个几乎无状态节点&#xff0c;可集群部署&#xff0c;节点之间无任何信息同步。 2.2、Broker Broker部署相对复杂&#xff0c;Broker分为Master与Slave&#xff0c;一个Master可以对应多个Slave&#xff0c;但是一个Sla…

数字孪生和人工智能异同?

数字孪生和人工智能是两个近年来备受关注的前沿技术&#xff0c;在不同领域发挥着重要作用。虽然两者都涉及数据处理和模拟&#xff0c;但其本质和应用有着显著的区别。本文将介绍数字孪生和人工智能之间的联系和区别&#xff0c;以帮助读者更好地理解它们在不同场景下的作用。…

虚拟机(Ubuntu1804)相机与激光雷达联合标定实现过程记录

在智能小车录制的点云数据在rviz打开一定要修改Fixed Frame为laser_link&#xff0c;这样才能看到点云&#xff0c;注意此时用的是雷神激光雷达&#xff0c;话题名是lslidar_,可采用rostopic list查看具体名称 1、新建一个终端打开roscore roscore2、在文件夹libratia中新建一…

Jmeter常用功能-参数化介绍

JMeter也有像LR中的参数化&#xff0c;本篇就来介绍下JMeter的参数化如何去实现。 参数化&#xff1a;录制脚本中有登录操作&#xff0c;需要输入用户名和密码&#xff0c;假如系统不允许相同的用户名和密码同时登录&#xff0c;或者想更好的模拟多个用户来登录系统。 这个时…

idea2023.3安装及配置

idea2023.3安装及配置 一.安装idea 1.卸载旧版本idea 2.下载idea旗舰版 Download IntelliJ IDEA: The Capable & Ergonomic Java IDE by JetBrains 旗舰版是收费的需要破解&#xff0c;社区版是免费的不需要破解&#xff0c;开发人员建议旗舰版 3.安装idea 修改安装目…

[LINUX]之文本匹配多行

在linux中创建文本如下&#xff1a; &#xff08;1&#xff09;显示test.txt文件里匹配test3字符串那行以及上下1行 cat test.txt |grep -C 1 test3 &#xff08;2&#xff09;显示test.txt文件里匹配test3字符串那行以及下面2行 cat test.txt |grep -A 2 test3 &#xff08;3&…

Qt6 Qt Quick UI原型学习QML第四篇

文章目录 布局项目【对齐】QML语句QML语法解释 布局项目【对齐】 QML提供了一种灵活的方式来使用锚来布局项目。锚定的概念是项目的基础&#xff0c;并且可用于所有视觉QML元素。锚的作用就像一个契约&#xff0c;比竞争的几何变化更强。锚是相对性的表达&#xff1b;你总是需…

三季度上市,比亚迪海豹DM-i内饰官图发布,延续海洋风格

据报道&#xff0c;比亚迪海洋网旗下全新车型海豹 DM-i今日发布了内饰官方图片。新车内部采用了独特的“海洋美学”设计理念&#xff0c;并体现了海洋网最新一代内饰风格。消息称&#xff0c;这款车型将于第三季度上市&#xff0c;定位为中大型混合动力轿车。 值得注意的是&…

【QT】元对象系统学习笔记(一)

QT元对象系统 01、元对象系统1.1、 元对象运行原则1.2、 Q_OBJECT宏1.3、 Qt Creator启动元对象系统1.4、 命令行启动元对象&#xff08;不常用&#xff09; 02、反射机制2.1、 Qt实现反射机制2.2、 反射机制获取类中成员函数的信息2.1.1、 QMetaMethon类2.1.2、QMetaObject类 …

【程序员必须掌握哪些算法?】

一个程序员一生中可能会邂逅各种各样的算法&#xff0c;但总有那么几种&#xff0c;是作为一个程序员一定会遇见且大概率需要掌握的算法。今天就来聊聊这些十分重要的“必抓&#xff01;”算法吧~ 常见算法介绍 本文所介绍的排序算法均以升序为例。 文章目录 常见算法介绍一 …

【解决】mysql卸载之后安装不同的版本导致mysqld无法启动

解决mysql不同版本之间数据的冲突 一. 背景二. 出现的问题三. 问题的原因四. 解决方式 一. 背景 说起来也是个巧合&#xff0c;在我安装mysql5.7版本的时候&#xff0c;看走眼了&#xff0c;安装成mysql8.0版本的了。于是乎&#xff0c;我当时觉得8.0&#xff0c;嗯&#xff0…

机械臂多任务逆运动学(优先级同等和存在优先级)

我们经常使用微分运动学来计算机器人的逆运动学&#xff0c;对于单个任务的机械臂的逆运动学使用的是梯度投影法&#xff1a; 冗余机械臂求解逆运动学解——梯度投影法 但是对于多任务的逆运动学在一般的机器人学里面很少有提及&#xff0c;最近看到了相关的论述&#xff0c;…

IP基础知识总结

IP他负责的是把IP数据包在不同网络间传送&#xff0c;这是网络设计相关的&#xff0c;与操作系统没有关系。所以这部分知识&#xff0c;不是网络的重点。IP和路由交换技术联系紧密。但是要作为基本知识点记住。 一、基本概念 网络层作用&#xff1a;实现主机与主机之间通信。 …

MySQL数据库操作篇4(内置函数连接查询子查询)

MySQL除了提供一些聚合函数供我们使用&#xff0c;同时还提供了很多的内置扩展函数&#xff0c;这些函数有的是进行日期处理的&#xff0c;有的是进行字符串处理的&#xff0c;有的则是进行数值处理&#xff0c;以及其它的种种函数&#xff0c;这些函数可以帮助我们对数据进行加…

创建/查看/编辑文本文件

创建/查看/编辑文本文件 将输出重定向到文件和程序 标准 输入/输出/错误 运行的程序需要从某个位置读取输入并将输出写入某位置。从shell提示符运行的命令通常会从键盘读取输入&#xff0c;并将输出发送到其终端窗口。 进程通过使用文件描述符的通道编号获取输出并发送输出。…

红队打靶:billu_b0x打靶思路详解(vulnhub)

目录 写在开头 第一步&#xff1a;主机发现和端口扫描 第二步&#xff1a;Web渗透 第三步&#xff1a;利用文件包含进行代码审计 第四步&#xff1a;图片马上传与反弹shell 第五步&#xff1a;敏感文件提权 总结与思考 写在开头 我的博客等级终于到三级了&#xff0c;…

Python接口自动化搭建过程,含request请求封装

开篇碎碎念 接口测试自动化好处 显而易见的好处就是解放双手&#x1f600;。 可以在短时间内自动执行大量的测试用例通过参数化和数据驱动的方式进行测试数据的变化&#xff0c;提高测试覆盖范围快速反馈测试执行结果和报告支持持续集成和持续交付的流程 使用Requestspytes…

Attention Is All Your Need

q,k,v是一个东西(自注意力) 由于位置编码通过sin和cos得到,在+-1之间抖动,因此为了与embedding相加scale匹配,所以embedding除以根号dk 注意力机制:注意力函数 quary(不同的q) 和 k 的相似度决定了value对应的权重(不同的权重)相加得到 (不同的)输出 英文积累…

宠物赛道又出爆品!TikTok播放破千万!

在欧美国家&#xff0c;养宠的风潮已经持续百年。美国作为全国第一大的宠物市场&#xff0c;其家庭的养宠率高达70%。有关数据显示&#xff0c;美国目前26-41岁人群比例占比最大&#xff0c;已达到32%&#xff0c;42-57岁人群比例下降到24%。 养宠人群逐渐呈现年轻化&#xff0…

参数名的映射,小心使用strict=False

从vgg16-397923af.pth里读取的数值应该和加载预训练模型后model.load_state_dict参数一致。 而我的不一致&#xff01; 原因&#xff1a;在载入参数到模型键值的不匹配&#xff0c;所以使用了strictFalse。 解决办法&#xff1a; 进行参数名的映射&#xff0c;将不匹配的参数名…