当前位置: 首页 > news >正文

【Golang切片】

切片

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

切片的引入

【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] = 66slice[1] = 88slice[2] = 99slice[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,3fmt.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)
}

在这里插入图片描述

相关文章:

【Golang切片】

切片 切片的引入内存分析切片的定义切片的遍历切片注意事项 切片的引入 【1】切片&#xff08;slice&#xff09;是golang中一种特有的数据类型 【2】数组有特定的用处&#xff0c;但是却有一些呆板&#xff08;数组长度固定不可变&#xff09;&#xff0c;所以在Go语言的代码…...

React-router的创建和第一个组件

需要先学react框架 首先&#xff1a;找到一个文件夹&#xff0c;在文件夹出打开cmd窗口&#xff0c;输入如下图的口令 npx create-react-app demo 然后等待安装 安装完成 接下来进入创建的demo实例 cd demo 然后可以用如下方式打开vscode code . 注意&#xff1a;不要忽略点号与…...

计算机设计大赛 深度学习猫狗分类 - python opencv cnn

文章目录 0 前言1 课题背景2 使用CNN进行猫狗分类3 数据集处理4 神经网络的编写5 Tensorflow计算图的构建6 模型的训练和测试7 预测效果8 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; **基于深度学习猫狗分类 ** 该项目较为新颖&a…...

Linux服务器磁盘及内存用量监控Python脚本(推送钉钉群通知)

文章目录 Python 脚本钉钉推送通知定时任务 Python 脚本 # -*- coding: utf-8 -*- import subprocessdef get_disk_usage():# 执行 df 命令获取磁盘使用情况df_process subprocess.Popen([df, -h, /], stdoutsubprocess.PIPE)output, _ df_process.communicate()output out…...

Android13 Audio框架

一、Android 13音频代码结构 1、framework: android/frameworks/base 1.AudioManager.java &#xff1a;音频管理器&#xff0c;音量调节、音量UI、设置和获取参数等控制流的对外API 2.AudioService.java &#xff1a;音频系统服务&#xff08;java层&#xff09;&#xff0c…...

kafka消费者接收不到消息

背景&#xff1a; 对kafka消息进行监听&#xff0c;生产者发了消息&#xff0c;但是消费端没有接到消息&#xff0c;监听代码 消费端&#xff0c;kafka配置 spring.kafka.bootstrap-serverskafka.cestc.dmp:9591 spring.kafka.properties.sasl.jaas.configorg.apache.kafka.…...

Python如何从SQL Server存取数据?

在Python中&#xff0c;你可以使用各种库来连接和操作 SQL Server 数据库。一种常用的库是pyodbc&#xff0c;它是一个用于连接到各种数据库的开源 Python 库&#xff0c;包括 SQL Server。以下是连接到 SQL Server 并存取数据的基本步骤&#xff1a; 1、安装 pyodbc 库&#…...

学校机房Dev c++解决中文乱码问题

工具->编译选项->勾选 编译时加入以下命令 -fexec-charsetGBK -finput-charsetUTF-8 显示中文&#xff1a;工具->编辑器选项->去掉第一个的勾勾。...

基于java+springboot景区行李寄存管理系统设计和实现

基于javaspringboot景区行李寄存管理系统设计和实现 博主介绍&#xff1a;多年java开发经验&#xff0c;专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 央顺技术团队 Java毕设项目精品实战案例《1000套》 欢迎点赞 收藏 ⭐留言 文末获取…...

03-grafana的下拉列表选项制作-grafana的变量

一、准备环境 为了实现下拉列表筛选的样例&#xff0c;我们监控两个linux节点&#xff1b; 目前&#xff0c;我们已经有了一个节点了&#xff0c;再添加一个&#xff1b; 二、grafana的仪表盘变量 如果想给仪表盘自定义下拉列表&#xff0c;那么&#xff0c;需要设置变量&#…...

Linux网络编程—— IO多路复用

Linux网络编程—— IO多路复用 1. I/O 多路复用&#xff08;I/O多路转接&#xff09;1.1 常见的几种I/O模型 2. select3. poll4. epoll :star: 1. I/O 多路复用&#xff08;I/O多路转接&#xff09; I/O 多路复用 使得程序能 同时监听 多个文件描述符&#xff0c;能够提高程序的…...

C++进阶(二) 多态

一、多态的概念 多态的概念&#xff1a;通俗来说&#xff0c;就是多种形态&#xff0c; 具体点就是去完成某个行为&#xff0c;当不同的对象去完成时会 产生出不同的状态。举个栗子&#xff1a;比如买票这个行为&#xff0c;当普通人买票时&#xff0c;是全价买票&#xff1b;学…...

【C++】set、multiset与map、multimap的使用

目录 一、关联式容器二、键值对三、树形结构的关联式容器3.1 set3.1.1 模板参数列表3.1.2 构造3.1.3 迭代器3.1.4 容量3.1.5 修改操作 3.2 multiset3.3 map3.3.1 模板参数列表3.3.2 构造3.3.3 迭代器3.3.4 容量3.3.5 修改操作3.3.6 operator[] 3.4 multimap 一、关联式容器 谈…...

Matlab/simulink微电网的PQ控制和下垂控制无缝切换建模仿真

​...

外包干了6个月,技术退步明显

先说一下自己的情况&#xff0c;本科生&#xff0c;19年通过校招进入广州某软件公司&#xff0c;干了接近4年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试…...

3. springboot中集成部署vue3

1. vue3构建 构建命令 npm run build&#xff0c; 构建的结果在disc目录&#xff1a; 2. springboot集成 2.1 拷贝vue3构建结果到springboot resources/static目录 2.2 springboot pom依赖 添加thymeleaf依赖 <dependency><groupId>org.springframework.boot</…...

问题

今天遇到数组开太大问题&#xff1a; 数组放在main函数里面&#xff0c;表示该数组是局部变量&#xff0c;不是全局变量&#xff0c;所以该数组是开在栈上&#xff0c;而栈的空间往往比较小&#xff0c;所以二维数组定义太大会导致爆栈。 全局变量全部存储在静态存储区。 在…...

#WEB前端

1.实验&#xff1a;vscode安装&#xff0c;及HTML常用文本标签 2.IDE&#xff1a;VSCODE 3.记录&#xff1a; &#xff08;1&#xff09;网页直接搜索安装vscode &#xff08;2&#xff09;打开vscode&#xff0c;在下图分别安装以下插件&#xff1a; Html Css Support …...

c语言经典测试题9

1.题1 #include <stdio.h> int main() { int i 1; sizeof(i); printf("%d\n", i); return 0; } 上述代码运行结果是什么呢&#xff1f; 我们来分析一下&#xff1a;其实这题的难点就是sizeof操作后i的结果是否会改变&#xff0c;首先我们创建了一个整型i&a…...

3d 舞蹈同步

目录 看起来很强大 unity驱动bvh跳舞&#xff1a; 脚飘动问题&#xff1a; bvh和播放关节对应关系 zxy格式 bvh和播放关节对应关系 zyx的对应关系&#xff1a; bvh播放器&#xff1a; 看起来很强大 GitHub - FORTH-ModelBasedTracker/MocapNET: We present MocapNET, a …...

5分钟掌握WebPShop:Photoshop终极WebP插件完全指南

5分钟掌握WebPShop&#xff1a;Photoshop终极WebP插件完全指南 【免费下载链接】WebPShop Photoshop plug-in for opening and saving WebP images 项目地址: https://gitcode.com/gh_mirrors/we/WebPShop 还在为Photoshop无法原生处理WebP格式而烦恼吗&#xff1f;WebP…...

CleanMyWechat:一键解放你的PC微信存储空间

CleanMyWechat&#xff1a;一键解放你的PC微信存储空间 【免费下载链接】CleanMyWechat 自动删除 PC 端微信缓存数据&#xff0c;包括从所有聊天中自动下载的大量文件、视频、图片等数据内容&#xff0c;解放你的空间。 项目地址: https://gitcode.com/gh_mirrors/cl/CleanMy…...

PotPlayer字幕翻译插件:5步实现免费自动化双语字幕体验

PotPlayer字幕翻译插件&#xff1a;5步实现免费自动化双语字幕体验 【免费下载链接】PotPlayer_Subtitle_Translate_Baidu PotPlayer 字幕在线翻译插件 - 百度平台 项目地址: https://gitcode.com/gh_mirrors/po/PotPlayer_Subtitle_Translate_Baidu 观看外语影视时&…...

为什么你的DeepSeek流式接口总在TP99处陡增?揭秘TCP_NODELAY误配+LLM输出熵突变双重陷阱

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;为什么你的DeepSeek流式接口总在TP99处陡增&#xff1f;揭秘TCP_NODELAY误配LLM输出熵突变双重陷阱 当 DeepSeek-R1 或 DeepSeek-V3 的流式响应&#xff08;如 /v1/chat/completions 启用 streamtrue&a…...

DeepSeek API调用成本失控?揭秘Token计费陷阱及4步精准降本法

更多请点击&#xff1a; https://codechina.net 第一章&#xff1a;DeepSeek API调用成本失控&#xff1f;揭秘Token计费陷阱及4步精准降本法 DeepSeek API 采用严格的 token 精确计费机制&#xff0c;但开发者常因忽略输入/输出双计费、系统提示词隐式消耗、以及未压缩上下文…...

Android应用架构规范深度解析与面试指南

引言 在Android应用开发中,架构设计是确保应用可维护性、可扩展性和稳定性的核心要素。随着移动应用的复杂度日益增加,采用规范的架构模式不仅能提升开发效率,还能减少错误和重构成本。本文将以“架构规范”为核心重点领域,深入探讨Android应用的主流架构模式、实现细节、…...

3分钟解锁网易云音乐隐藏功能:BetterNCM安装器完整使用指南

3分钟解锁网易云音乐隐藏功能&#xff1a;BetterNCM安装器完整使用指南 【免费下载链接】BetterNCM-Installer 一键安装 Better 系软件 项目地址: https://gitcode.com/gh_mirrors/be/BetterNCM-Installer 你是否厌倦了网易云音乐千篇一律的界面和有限的功能&#xff1f…...

Taotoken审计日志功能在团队协作与安全排查中的作用

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 Taotoken审计日志功能在团队协作与安全排查中的作用 在团队协作使用大模型API的过程中&#xff0c;一个常见的问题是&#xff1a;当…...

ide-eval-resetter深度解析:JetBrains IDE试用期管理架构揭秘

ide-eval-resetter深度解析&#xff1a;JetBrains IDE试用期管理架构揭秘 【免费下载链接】ide-eval-resetter 项目地址: https://gitcode.com/gh_mirrors/id/ide-eval-resetter ide-eval-resetter作为JetBrains IDE试用期重置的专业工具&#xff0c;通过分布式评估数据…...

BilibiliDown:3分钟快速掌握B站视频下载的完整解决方案

BilibiliDown&#xff1a;3分钟快速掌握B站视频下载的完整解决方案 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader &#x1f633; 项目地址: https://gitcode.com/gh_mirrors/…...