【Golang 基础】Go 语言的切片(Slice)

【高低温试验】试验报告模板 高低温循环试验,验证被测设备(DUT)在极端高温、低温环境下的性能稳定性、功能可靠性及安全性,确保其符合设计规范和相关标准(如GB/T 2423.1、GB/T 2423.2)。:验证设备在剧烈温度变化下的耐受能力(如-40℃↔+85℃,温变速率≥10℃/min)。低温测试标准:GB/T 2423.2-2008(温度-40℃,保持时间4小时):模拟高温高湿环境(如温度+60℃,湿度95%RH),测试防潮性能。 阅读详情

Go 语言的切片(示例代码)

Slice是一个通过指向数组底层,来进行变长数组的实现。

  • 定义切片的格式:var <sliceName> []<type>;
package basic

import "fmt"

func DeclaratSlice(){
    
    // 定义一个空 slice
    var slice1 []int
    fmt.Println(slice1) // []

    // 定义一个 slice 并赋初始值
    slice2 := []int{ 1, 3, 4 }
    fmt.Println(slice2) // [1 3 4]
}
  • 通过 make([]<type>, len, cap)格式来创建 slice。其中,len表示 slice的长度,cap表示 slice的容量;cap的值默认情况下与 len相等,cap可以省略;
package basic

import "fmt"

// 通过 make 声明 切片
func DeclaratSliceByMake() {
    var slice1 = make([]int, 6)
    fmt.Println(slice1) // [0 0 0 0 0 0]
}

可以通过内置函数 len()和 cap()可以获取 slice的 len与 cap的值

// 通过 make 声明 切片
func DeclaratSliceByMake() {
    var slice1 = make([]int, 6)
    fmt.Println(slice1) // [0 0 0 0 0 0]

    fmt.Println("len(slice1) = ", len(slice1)) // len(slice1) =  6
    fmt.Println("cap(slice1) = ", cap(slice1)) // cap(slice1) =  6
}

Reslice

  Reslice表示将一个 Slice再次 Slice。

  • Reslice与 slice都是指向同一底层数组;
  • Reslice的索引以 slice的索引为准,其最大容量(cap)为 slice的容量;
  • 索引越界不会导致底层数组的重新分配,而是引发错误。
package basic

import "fmt"

// Reslice
func Reslice() {
    array := [...]int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
    
    slice1 := array[2:5]
    slice2 := slice1[0:6]

    fmt.Println("array=", array, "len=", len(array), "cap=", cap(array)) // array= [0 1 2 3 4 5 6 7 8 9] len= 10 cap= 10
    fmt.Println("slice1=", slice1, "len=", len(slice1), "cap=", cap(slice1)) // slice1= [2 3 4] len= 3 cap= 8
    fmt.Println("slice2=", slice2, "len=", len(slice2), "cap=", cap(slice2)) // slice2= [2 3 4 5 6 7] len= 6 cap= 8
}

Slice 的操作

  • append

   append()用于在 slice后最追加新的元素,这些元素保存到底层数组,并不会影响原 slicez,它返回变更后新的 slice对象。

  如果追加的元素超出之前的 slice容量,则重新分配数组并拷贝原数据,并不影响底层数组。

package basic

import "fmt"

func SliceByAppend() {
    array := [...]int{0, 1, 2, 3}

    slice := array[:2]
    fmt.Printf("%p %v, cap = %d\n", slice, slice, cap(slice)) // 0xc42001c160 [0 1], cap = 4
    
    slice = append(slice, 10)
    fmt.Printf("%p %v\n", &array, array) // 0xc42001c160 [0 1 10 3] cap = 4
    fmt.Printf("%p %v, cap = %d\n", slice, slice, cap(slice)) // 0xc42001c160 [0 1 10], cap = 4
    
    slice = append(slice, 15, 20)
    fmt.Printf("%p %v cap = %d \n", &array, array, cap(array)) // 0xc42001c160 [0 1 10 3] cap = 4
    fmt.Printf("%p %v, cap = %d\n", slice, slice, cap(slice)) // 0xc420012240 [0 1 10 15 20], cap = 8
}
  • copy

  copy(目标 slice, 被拷贝的 slice),用于拷贝 slice,返回值为拷贝的个数。

package basic

import "fmt"

func SliceByCopy() {
    sliceA := []int{1, 2, 3, 4, 5}
    sliceB := []int{5, 4}
    
    copyCount := copy(sliceA, sliceB)
    
    fmt.Println(copyCount) // 2
    
    fmt.Println(sliceA) // [5 4 3 4 5]
    fmt.Println(sliceB) // [5 4]
}
EB tresos配置指南:CAN通信信号收发全流程解析 本文详细解析了使用EB tresos配置工具实现AUTOSAR架构下CAN通信信号收发功能的全流程。从环境准备、COM模块信号定义、PduR路由配置、CanIf硬件抽象到CAN驱动层设置,提供了清晰的步骤指南和关键配置要点,帮助开发者快速打通从应用层到物理层的数据链路,实现可靠的CAN通信。 阅读详情

相关推荐

使用 ChatGPT/Copilot 提升前端开发效率的 N 种方式

typescript// 输入:根据这个 JavaScript 对象,生成完整的 TypeScript 类型定义id: '123',stock: 50,},// ChatGPT 生成:id: string;discount?: number;// 可选属性// 只读属性// 更进一步,生成 Zod schema 用于运行时验证:});}),});AI 代码助手真正的革命性不在于它能生成多少代码,而在于它改变了我们解决问题的方式。

fineday 1590

【go基础】切片

go语言中数组的长度是固定的,如果数组中元素个数已经等于数组容量时,就不能再继续往数组中添加新元素了。为了解决此问题,就有了切片(slice)类型,它时在数组的基础上重新进行了一层封装。 一、定义 切片的本质 切片的本质就是对底层数组的封装,它包含了三个信息:底层数组的指针、切片的长度(len)和切片的容量(cap)。 基本定义 语法:var 变量 [] 类型 表面上看,定义切片和定义数组是非常相似的,就是不用写明存储元素的个数即可。 ```go package main import "fmt" /

每天进步一点点 1418

告别理论!用AXI-Stream实战摄像头数据流采集(附Verilog关键代码片段)

本文详细解析了如何通过AXI-Stream接口实现工业级可靠性的摄像头数据流采集系统,重点介绍了Verilog实战代码、AXI-Stream握手机制及数据反压处理方案。通过三级缓冲架构和带宽优化,有效解决了OV5640等摄像头在高速场景下的帧丢失问题,为FPGA图像处理项目提供了实用解决方案。

weixin_42563415的博客 157

Go 切片Slice的长度len与容量cap

0x00 简介 Go 语言之旅示例 切片的长度与容量 切片拥有长度和容量。 切片的长度是它所包含的元素个数。 切片的容量是从它的第一个元素开始数,到其底层数组元素末尾的个数。 切片 s 的长度和容量可通过表达式 len(s) 和 cap(s) 来获取。 package main import "fmt" func main() { s := []int{2, 3, 5, 7, 11, 13}...

稻草人技术博客 2万+

零基础学会制作 基于STM32/51单片机的智能血压表设计/血压表/血压计

本系统是以单片机为主控,传感器模快、显示模块、人机交互、无线传输等组成的智能血压表设计。传感器用于测量血压和脉搏,主控电路板用于处理数据和控制设备,显示屏则用于显示测量结果。通过软件设计,完成测量数据的处理,其中血压和脉搏的测量、数据的分析和处理等。

weixin_55654459的博客 2473

STM32F103C8T6心电采集实战:从PCB设计到上位机开发的完整指南(附TI杯开源资料)

本文详细介绍了基于STM32F103C8T6的心电采集系统开发全流程,从PCB设计到上位机开发,特别适合大学生电子设计大赛参赛者参考。内容涵盖硬件设计精要、软件算法优化及上位机开发技巧,并附TI杯开源资料,帮助开发者低成本实现医疗级心电信号采集。

kafka6courier的博客 193

Go Slice 实现原理深度解析:从底层机制到工程实践

本文深入剖析Go语言中Slice(切片)的底层实现原理和性能优化实践。首先分析了Slice本质上是包含指向底层数组指针、长度和容量的结构体,与数组存在显著差异。然后详细介绍了三种Slice创建方式及内存布局特点,重点指出截取操作会共享底层数组的风险。接着解析了append操作的扩容策略:容量小于1024时双倍扩容,大于等于1024时1.25倍扩容,并展示了预分配容量带来的性能优势。最后给出了企业级开发中的关键建议:预分配容量、避免误操作底层数据、注意并发安全,帮助开发者规避常见陷阱,写出更高效的Go代码。

随时分享高质量技术文章 1053

9.6华为OD机试真题 新系统 - 少儿爬山闯关积分游戏 (Java/Py/C/C++/Js/Go)

2026 华为OD机试真题9月6日华为OD上机新系统考试真题 100 分题型。

算法大师! 854

【Go】Go 语言切片(Slice)

详解Go语言中的“切片”数据类型

weixin_44211968的博客 1万+

一键生成Microsoft Store应用直链下载:绕过商店故障的终极方案

遇到商店无法加载时,复制链接 → 粘贴到Adguard → 下载主程序包 → 开启开发者模式安装。整个过程耗时不超过2分钟,彻底摆脱商店依赖!

安德洛夫 2183

word多级列表为什么会变成黑块解决思路

今天在写文档时,发现WORD5级的标题都变黑块了,找了度娘的资料,终于解决了。 第一种 1、光标bai放在黑快的右边,按向左的箭头,然后ctrl+shift+s,点击重新应用。 2、点击“定义新的多级列表”(不知道从哪儿找这个按钮的百度下),直接点确定。 3、这里很重要!!!不要直接保存,而是直接关掉word,会提示保存还是不保存,这个地方再点击保存。 第二种 Word2016 使用宏代码修复方法 1.找到视图-宏,打开 查看宏 2.创建宏 3.贴...

霍力强的专栏 8580

【Go-补充】实现动态数组:深入理解 slice 与自定义实现

在 Go 语言中,我们经常使用内置的slice(切片) 来处理可变长度的序列数据。slice是 Go 语言中一个强大且灵活的数据结构,它在底层是对数组的抽象,提供了动态增长的能力。本文将通过一个实际的例子,带你深入理解slice的工作原理,并展示如何基于slice自行实现一个具有动态扩容能力的数组结构。虽然 Go 语言的slice已经足够强大,但在某些场景下,例如为了更好地理解slice的工作机制,或者需要添加一些特定的并发控制或业务逻辑时,我们可能需要自行实现一个类似可变长数组的数据结构。

2202_75331338的博客 1197

地平线旭日X3 安装xfce桌面+VNC查看USB摄像头

VNC是Virtual Network Computing的缩写,它是一种使用RFB(Remote Frame Buffer)协议的用于控制远程电脑的图形桌面分享系统。xfce桌面相比于GNOME桌面更加轻量,占用的资源更少,在没有GPU的设备上也可以运行(旭日的Desktop版本从外观上好像就是xfce桌面,具体没有尝试)。可以使用专用的VNC客户端连接到开发板,例如vnc viewer。板子默认带有openssh-server,因此,WiFi热点连接成功后,就可以使用ssh登录开发板了。

bingdund的博客 509

100天精通Golang(基础入门篇)——第11天:深入解析Go语言中的切片(Slice)及常用函数应用

本文是《100天精通Golang(基础入门篇)——第11天:切片(Slice)》,将详细介绍切片的概念、语法、修改、以及len()、cap()、append()和copy()函数的使用。读者将通过学习本文深入了解Golang中切片的使用方法和常用函数的功能。切片(Slice)是Golang中非常重要的数据结构,它可以动态地调整大小,并且常用于处理集合的情况。在本文中,我们将系统地介绍切片的概念、语法和修改方式,并逐一讲解len()、cap()、append()和copy()函数的用法。

猫头虎技术团队:授渔优于赠鱼,兴趣引领智慧,探索之乐尤显珍贵。商务合作+:Libin9iOak ,万粉变现+:优快云WF,猫头虎承诺每年免费为100名C站创作者做账号流量诊断服务!全网搜:猫头虎技术团队,点击文章底部名片或直接私信我一切皆可谈,快找虎哥! 5万+

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Go语言核心技术解析02

摘要:本文深入解析Go语言的核心特性,涵盖高效并发实现(Goroutine轻量级线程、GMP调度模型)、内存管理机制(GC并发标记清除算法)、性能优化技巧(避免内存逃逸/泄露的方法),以及基础数据类型对比(数组值类型vs切片引用类型)。通过与其他语言线程池的对比,突显Go在并发编程和资源管理上的优势,为开发者提供全面的Go语言实践指南。(150字)

weixin_45644347的博客 1305

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Go语言基础结构 —— Slice 切片

在Go语言中,切片(Slice)是一种数据结构,它是对数组一个连续片段的引用,这个数组称为切片的底层数组。切片和数组的关系是非常紧密的。在Go语言中,数组是一个固定长度的序列,而切片则是一个可变长度的序列。切片是建立在数组之上的,它提供了动态数组的功能,可以根据需要动态地增加或缩小切片的长度。

xjx的博客 2000

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Go语言零基础入门,捕获错误、slice切片、for循环、test

基本功要扎实,Go,Go...

深度学习领域优质创作者,优快云博客专家 660

Go语言基础:切片slice的声明及使用

go语言基础: 切片的声明和使用

低调,谦虚,自律,反思,成长,保持热爱,奔赴梦想 2097

Go语言基础 - 切片(slice)

一、定义: 切片是一个拥有相同类型元素的可变长度的序列。 二、切片的结构: type SliceHeader struct { Data uintptr //第一个是字符串指向的底层字节数组, Len int //第二个是字符串的字节的长度 Cap int//切片指向的内存空间的最大容量(对应元素的个数不是字节数) } 三、声明方式: var name [] T T : 表切片元素类型,可以是整型、浮点型、布尔型、切片、map 、函数等。 切片的..

学而不思则罔,思而不学则殆! 696

go语言基础 切片 slice

切片:slice 理解为变长的数组 A:切片创建 s1:=[]int{1,2,3,4,5} s2:=make([]T,len,cap) arr := [5]int{1,2,3,4,5} s3 := arr[start:end] // 切割数组:[start,end) s4:=arr[:] B:切片的类型: []数据类型 切片属于引用类型: s1:=[] int{1,2,3,4} ...

超级系博客 211

7-Go语言基础-切片(Slice)

7-Go语言基础-切片(Slice)

Salted fish in hand, I have the world. 357

Go语言基础(十)Slice(切片)

Go 语言切片是对数组的抽象。 Go语言中数组是具有固定长度而且拥有零个或者多个相同或相同数据类型元素的序列。由于数组长度固定,所以在Go语言比较少直接使用。而slice长度可增可减,使用场合比较多。更深入的区别在于:数组在使用的过程中都是值传递,将一个数组赋值给一个新变量或作为方法参数传递时,是将源数组在内存中完全复制了一份,而不是引用源数组在内存中的地址。为了满足内存空间的复用和数组元素的值...

pangsky的博客 451

Go语言基础(九)—— Go语言结构体、Go语言切片(Slice)、range遍历、Go语言Map(集合)

Go语言结构体 Go 语言中数组可以存储同一类型的数据,但在结构体中我们可以为不同项定义不同的数据类型。 结构体是由一系列具有相同类型或不同类型的数据构成的数据集合。  结构体表示一项记录,比如保存图书馆的书籍记录,每本书有以下属性: Title :标题   Author : 作者   Subject:学科   ID:书籍 ID  定义结构体    结构体定义需要使用 type 和 s...

The_Reader的博客 944

【GO基础学习】基础语法(2)切片slice

GO基础语法学习:切片slice

高朗的博客 1213

GO语言基础-04-数据类型-03-切片[slice](声明切片、初始化切片、切片赋值、切片长度、切片容量、空切片、append、copy)

1. 声明切片 2. 初始化切片 2.1 切片长度 2.1.1 初始化指定长度的切片 2.1.2 查看切片长度 len() 2.2 切片容量 2.2.1 初始化指定容量的切片 2.2.2 查看切片长度 len() 3 切片赋值 3.1 直接赋值 3.2 引用数组给切片赋值 3.3 引用数组某区间给切片赋值 3.4 通过切片赋值给切片 4. 空切片 5. append() 6. copy()

架构+开发+运维 2329

Go语言基础知识(三) 数组Array 切片 Slice

数组 package main import "fmt" /* 数组的四种定义方法 1、 先声明 再循环赋值 2、 声明的同时赋值 并且指定数组大小 3、 声明的同时赋值 但用...来表示数组大小 4、 声明的同时只给某个位置赋值 其他部分值为初始值(即为0) 注意: 数组的长度大小必须固定,因为数组的长度也是数组比较的一部分,若数组的...

HJ 518
上一篇: 【Golang 基础】Go 语言的数组
下一篇: 【Golang 基础】Go 语言的 Map
hvkcoder
博客等级 码龄11年 28粉丝 48原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值