【Golang】slice切片
slice
Go语言的切片是对数组的抽象。
数组的使用
package mainimport ("fmt"
)// 传递固定长度的数组还是值传递的方式
func printArray(myArray [5]int) {for index, value := range myArray {fmt.Println("index:", index, "value:", value)}}func main() {var myArr [5]intmyArr2 := [10]int{1, 2, 3, 4}myArr3 := [4]int{1, 2, 3, 4}myArr4 := []int{1, 2, 3, 4}for i := 0; i < len(myArr); i++ {fmt.Println(myArr[i])}for index, value := range myArr2 {fmt.Println("index:", index, "value:", value)}fmt.Printf("myArr1 type=%T\n", myArr)fmt.Printf("myArr2 type=%T\n", myArr2)fmt.Printf("myArr3 type=%T\n", myArr3)}

注意:
数组传递的参数是以值拷贝的形式进行传递,如下:(在函数中修改了,但在主函数中并没有变化)
package mainimport ("fmt"
)// 传递固定长度的数组还是值传递的方式
func printArray(myArray [5]int) {for index, value := range myArray {fmt.Println("index:", index, "value:", value)}myArray[0] = 15}func main() {myArr2 := [5]int{1, 2, 3, 4}printArray(myArr2)fmt.Println("==================")for index, value := range myArr2 {fmt.Println("index:", index, "value:", value)}}

Go数组的长度不可改变,在特定的场景中这样的集合就不太适合了,Go中就提供了内置类型切片(动态数组),与数组相比,切片的长度是不固定的,可以追加时可能使得切片的容量增大。
定义切片
可以声明一个未指定大小的数组来定义切片(切片不需要说明长度。)
var identifier []type
使用make()函数来创建切片:
var slice1 []type = make([]type, len)也可以简写为slice1 := make([]type, len)//也可以指定容量,其中capacity为可选参数。make([]T, length, capacity)
切片的四种初始化的方式
package mainimport "fmt"func main() {//声明slice是一个切片,并且初始化,默认值是1,2,3长度是len=3slice1 := []int{1, 2, 3}//声明slice是一个切片,但是并没有为slice分配空间var slice2 []intslice2 = make([]int, 10, 15)slice2[0] = 100//声明slice是一个切片,同时给slice分配3个空间,初始化值是0var slice3 []int = make([]int, 10)//声明slice是一个切片,同时为slice分配空间,10个空间,初始化值是0,通过:=推导出slice是一个切片slice4 := make([]int, 10)fmt.Printf("len=%d,slice=%v\n", len(slice1), slice1)fmt.Printf("len=%d,slice=%v,cap=%d\n", len(slice2), slice2, cap(slice2))fmt.Printf("len=%d,slice=%v\n", len(slice3), slice3)fmt.Printf("len=%d,slice=%v\n", len(slice4), slice4)}

切片的追加,截取与拷贝
切片示意图:

追加
如果想增加切片的容量,我们必须创建一个新的更大的切片并把原分片的内容都拷贝过来
长度增加后,超过容量,则容量增加2倍
package mainimport "fmt"func main() {var numbers = make([]int, 3, 5)fmt.Printf("len=%d,cap=%d,slice=%v\n", len(numbers), cap(numbers), numbers)numbers = append(numbers, 1)fmt.Printf("len=%d,cap=%d,slice=%v\n", len(numbers), cap(numbers), numbers)numbers = append(numbers, 1)numbers = append(numbers, 1)fmt.Printf("len=%d,cap=%d,slice=%v\n", len(numbers), cap(numbers), numbers)}

截取
s := []int{1, 2, 3}//左闭右开s1 := s[0:2]s1[0] = 100s[1] = 200fmt.Printf("len=%d,cap=%d,slice=%v\n", len(s), cap(s), s)fmt.Printf("len=%d,cap=%d,slice=%v\n", len(s1), cap(s1), s1)

拷贝
截取是采用的浅拷贝,是指向的同一个地址。
如果要深拷贝。可以使用copy函数
s := []int{1, 2, 3}var s1 = make([]int, 3)copy(s1, s)s1[0] = 100fmt.Printf("len=%d,cap=%d,slice=%v\n", len(s), cap(s), s)fmt.Printf("len=%d,cap=%d,slice=%v\n", len(s1), cap(s1), s1)

相关文章:
【Golang】slice切片
slice Go语言的切片是对数组的抽象。 数组的使用 package mainimport ("fmt" )// 传递固定长度的数组还是值传递的方式 func printArray(myArray [5]int) {for index, value : range myArray {fmt.Println("index:", index, "value:", value)…...
开源网安模糊测试平台SFuzz全新升级,从标准到实践助力车企安全出海
开源网安模糊测试平台SFuzz全新升级,参照各国相关标准要求进行针对性建设,可为智能网联汽车信息安全测试提供更为强大的工具支持。SFuzz向被测系统输入大量随机数据,模拟各种异常情况,可以发现被测系统内潜在的缺陷和漏洞…...
Go bytes包
bytes包 Go 语言中的 bytes 包提供了用于操作字节切片的函数集合。字节切片是 Go 语言中非常常用的数据类型,用于表示二进制数据或 UTF-8 编码的字符串。 bytes 包主要功能 操作和处理字节切片搜索和比较字节切片修改和分割字节切片读取和写入字节切片 使用场景 字…...
将List切割为多个指定长度的多个List
参考: https://blog.csdn.net/baidu_41480640/article/details/122507018https://blog.csdn.net/H1767410/article/details/138333350https://blog.51cto.com/u_16213352/7632003https://blog.csdn.net/2301_82243396/article/details/137900249 手写1 private List<List&l…...
【实战】mysql加密函数AES_ENCRYPT无缝迁移到磐维2.0的加密函数MY_ENCRYPT_AES128
在mysql迁移到磐维2.0数据库过程中,mysql使用AES_ENCRYPT函数进行加密。 在磐维2.0数据库中,对应的加密函数为MY_ENCRYPT_AES128 --mysql使用AES_ENCRYPT进行加密,AES_DECRYPT解密 select HEX(AES_ENCRYPT(test1234,abcd2024)) from dual; …...
使用YOLO训练好自己的模型并持续训练【教程二】
前言 在使用已经训练好的 YOLOv5 模型继续训练时,如果减少了 yaml 文件中的 classes 分类数,这会对模型产生影响。具体影响取决于以下几个方面: 类别数量减少:如果你在继续训练时减少了 classes 中的类别数量,模型将不…...
STC32G/F/8H通用无刷电机驱动板
STC32G/F/8H通用无刷电机驱动板 📌相关篇《低成本STC32G8K64驱动控制BLDC开源入门学习方案》 ✨该驱动板是在上一版的基础上改版而来。这里的STC32G/F/8H所指的是封装型号为-LQFP48的STC32G8K64、STC32G12K128、STC32F12K54、STC8H8K64U。是一款兼容有感和无感设计的…...
java Web 优秀本科毕业论文系统用eclipse定制开发mysql数据库BS模式java编程jdbc
一、源码特点 JSP 优秀本科毕业论文系统是一套完善的web设计系统,对理解JSP java serlvet 编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为TOMCAT7.0,eclipse开发,数据库为Mysql5.0&a…...
SAP_MMABAP模块_MM60物料清单通过增强新增物料描述
业务背景: 用户需要在系统标准的物料主数据查询报表MM60中,添加物料组描述,一直以来,我都觉得标准的MM60显示的内容字段不够多,不太好用。 以往都是给用户新开发一个物料主数据查询报表来解决的,但是这次刚…...
lodash中flush的使用(debounce、throttle)
在项目的配置中,看到了一个请求,类似是这样的 import { throttle } from lodash-es// 请求函数 async function someFetch(){const {data} await xxx.post()return data }// 节流函数 async function throttleFn(someFetch,1000)// 执行拿到数据函数 a…...
设计高并发秒杀系统:保障稳定性与数据一致性
✨✨谢谢大家捧场,祝屏幕前的小伙伴们每天都有好运相伴左右,一定要天天开心哦!✨✨ 🎈🎈作者主页: 喔的嘛呀🎈🎈 目录 引言 一. 系统架构设计 1. 系统架构图 二、 系统流程 三…...
从源码到成品:直播电商与短视频带货APP的开发之路
本篇文章,笔者将详细探讨从源码到成品,直播电商与短视频带货APP的开发过程。 一、市场调研与需求分析 通过用户调研,可以确定目标用户群体的需求,从而为产品的功能设计提供依据。 1.1市场分析 消费者对视频内容的偏好ÿ…...
C++OCR API减轻人们文字录入的负担
曾几何时,许多大企业会设立文字录入专员的岗位。相信有不少人第一份实习工作就是录入资料,文档、发票、证件等形形色色的文件堆积如山,日积月累的敲击键盘,一张一张的录入电脑系统。这种工作是枯燥的,可以练就文字录入…...
web安全基础名词概念
本节内容根据小迪安全讲解制作 第一天 域名: 1.1什么是域名? 网域名称(英语:Domain Name,简称:Domain),简称域名、网域,是由一串用点分隔的字符组成的互联网上某一台计算机或计算机组的名称&a…...
ctfshow-web入门-文件上传(web161、web162、web163)远程包含
目录 1、web161 2、web162 3、web163 1、web161 先传配置文件,可以上传成功 因为我前面给的 .user.ini 都是带了图片头 GIF89a 的,前面的题这个图片头可以去掉,但是在这里如果去掉是不行的。 因此后面上传的东西我们都带上这个图片头&…...
【Gradle】(三)详细聊聊依赖管理:坐标、依赖配置、依赖传递、依赖冲突
文章目录 1.概述2.依赖管理2.1.坐标2.2.依赖的基本概念2.3.依赖配置(Dependency configurations)2.3.1.依赖路径2.3.2.依赖配置与依赖路径的关联 2.4.依赖传递2.4.1.准备工作2.4.2.运行时依赖传递jar包生成与依赖配置依赖树打印使用 Dependency Analyzer…...
C#数据类型:object、var和dynamic的比较与应用
在C#中,object、var和dynamic虽然常被提及为可以处理多种数据类型的“万能”方式,但它们各自有不同的应用场景、特性和优缺点。下面我将用通俗易懂的方式结合示例来详细说明这三者的区别与应用。 1. object 定义与应用场景:object是C#中所有…...
【面试题】MySQL(第一篇)
1. MySQL是什么? MySQL是一种开源的关系型数据库管理系统(RDBMS),它使用结构化查询语言(SQL)进行数据管理。MySQL具有高性能、可靠性、可扩展性和兼容性等特点,广泛应用于Web应用开发中。 2. …...
SQL Server集成服务(SSIS):数据集成的瑞士军刀
SQL Server集成服务(SSIS):数据集成的瑞士军刀 在数据仓库和大数据处理领域,SQL Server集成服务(SSIS)扮演着至关重要的角色。作为微软SQL Server套件的一部分,SSIS提供了一套强大的工具&#…...
鸿蒙开发HarmonyOS NEXT (三) 熟悉ArkTs (上)
一、自定义组件 1、自定义组件 自定义组件,最基础的结构如下: Component struct Header {build() {} } 提取头部标题部分的代码,写成自定义组件。 1、新建ArkTs文件,把Header内容写好。 2、在需要用到的地方,导入…...
铭豹扩展坞 USB转网口 突然无法识别解决方法
当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...
Linux 文件类型,目录与路径,文件与目录管理
文件类型 后面的字符表示文件类型标志 普通文件:-(纯文本文件,二进制文件,数据格式文件) 如文本文件、图片、程序文件等。 目录文件:d(directory) 用来存放其他文件或子目录。 设备…...
Leetcode 3576. Transform Array to All Equal Elements
Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接:3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到…...
Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动
一、前言说明 在2011版本的gb28181协议中,拉取视频流只要求udp方式,从2016开始要求新增支持tcp被动和tcp主动两种方式,udp理论上会丢包的,所以实际使用过程可能会出现画面花屏的情况,而tcp肯定不丢包,起码…...
【大模型RAG】Docker 一键部署 Milvus 完整攻略
本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装;只需暴露 19530(gRPC)与 9091(HTTP/WebUI)两个端口,即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...
ETLCloud可能遇到的问题有哪些?常见坑位解析
数据集成平台ETLCloud,主要用于支持数据的抽取(Extract)、转换(Transform)和加载(Load)过程。提供了一个简洁直观的界面,以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...
BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践
6月5日,2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席,并作《智能体在安全领域的应用实践》主题演讲,分享了在智能体在安全领域的突破性实践。他指出,百度通过将安全能力…...
用docker来安装部署freeswitch记录
今天刚才测试一个callcenter的项目,所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...
使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台
🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...
嵌入式学习笔记DAY33(网络编程——TCP)
一、网络架构 C/S (client/server 客户端/服务器):由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序,负责提供用户界面和交互逻辑 ,接收用户输入,向服务器发送请求,并展示服务…...
