当前位置: 首页 > 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 …...

工程师必读:Datasheet高效阅读与实战技巧

1. 为什么Datasheet是工程师的必修课第一次拿到TI的TPS5430电源芯片datasheet时&#xff0c;我盯着那58页的英文文档发呆了半小时。当时刚入行的我完全不明白&#xff0c;为什么一个简单的DC-DC转换器需要如此复杂的技术文档。直到项目deadline前三天&#xff0c;电路板上的电源…...

突破性解决方案:用cursor-free-vip开源工具解锁Cursor Pro功能的深度解析

突破性解决方案&#xff1a;用cursor-free-vip开源工具解锁Cursor Pro功能的深度解析 【免费下载链接】cursor-free-vip [Support 0.45]&#xff08;Multi Language 多语言&#xff09;自动注册 Cursor Ai &#xff0c;自动重置机器ID &#xff0c; 免费升级使用Pro 功能: Youv…...

Ubuntu20.04 软件和更新故障排查与优化指南

1. 软件源问题排查与修复 遇到Ubuntu20.04软件和更新打不开的情况&#xff0c;十有八九是软件源出了问题。我遇到过最典型的情况就是系统突然提示"无法连接到软件源"&#xff0c;或者点击软件更新器后毫无反应。这时候别急着重装系统&#xff0c;跟着我一步步排查。 …...

突破硬件限制的开源游戏串流方案:Sunshine跨设备游戏体验指南

突破硬件限制的开源游戏串流方案&#xff1a;Sunshine跨设备游戏体验指南 【免费下载链接】Sunshine Self-hosted game stream host for Moonlight. 项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine 当你拥有一台高性能游戏PC&#xff0c;却只能在固定位置享…...

从源码到DLL:手把手教你将ZeroMQ 4.3.2编译成可复用的动态库(附常见项目引用配置)

从源码到工程化&#xff1a;ZeroMQ动态库编译与项目集成实战指南 当你第一次尝试将ZeroMQ引入C项目时&#xff0c;是否遇到过这样的困境&#xff1a;明明按照教程编译出了libzmq.dll&#xff0c;却在项目链接时频频遭遇"无法解析的外部符号"或"找不到DLL"错…...

如何快速掌握OpenEMS:开源能源管理系统的完整指南

如何快速掌握OpenEMS&#xff1a;开源能源管理系统的完整指南 【免费下载链接】openems OpenEMS - Open Source Energy Management System 项目地址: https://gitcode.com/gh_mirrors/op/openems 想要打造智能能源管理系统却不知从何入手&#xff1f;OpenEMS开源能源管理…...

Qwen3.5-4B-Claude-Opus-GGUF智能助手:产品需求文档结构化分析与PRD撰写辅助

Qwen3.5-4B-Claude-Opus-GGUF智能助手&#xff1a;产品需求文档结构化分析与PRD撰写辅助 1. 产品需求文档撰写的挑战与解决方案 产品需求文档(PRD)是产品开发过程中至关重要的文件&#xff0c;它定义了产品的功能、特性和行为。然而&#xff0c;撰写高质量的PRD往往面临以下挑…...

KMS_VL_ALL_AIO开源激活工具:批量授权管理与本地服务部署的高效解决方案

KMS_VL_ALL_AIO开源激活工具&#xff1a;批量授权管理与本地服务部署的高效解决方案 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO KMS_VL_ALL_AIO 是一款智能开源激活工具&#xff0c;专为解决…...

Qwen3-14B-Int4-AWQ赋能SolidWorks设计文档:自动生成零件说明与装配指南

Qwen3-14B-Int4-AWQ赋能SolidWorks设计文档&#xff1a;自动生成零件说明与装配指南 1. 机械设计文档的自动化革命 在机械设计领域&#xff0c;工程师们常常面临一个共同的痛点&#xff1a;完成SolidWorks三维建模后&#xff0c;还需要花费大量时间编写配套的技术文档。零件材…...

基于拓展卡尔曼滤波的同步定位与地图构建全流程,通过自身运动模型和测距方位传感器,实时估计自身位姿并构建环境地标地图附matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。&#x1f34e; 往期回顾关注个人主页&#xff1a;Matlab科研工作室&#x1f447; 关注我领取海量matlab电子书和…...