0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

golan共享底层数组的切片

麦辣鸡腿堡 来源:盼盼编程 作者:盼盼编程 2023-10-09 09:56 次阅读

nil 和空切片

有时,程序可能需要声明一个值为 nil 的切片(也称nil切片)。只要在声明时不做任何初始化,就会创建一个 nil 切片。

var num []int

在 Golang 中,nil 切片是很常见的创建切片的方法。nil 切片可以用于很多标准库和内置函数。在需要描述一个不存在的切片时,nil 切片会很好用。比如,函数要求返回一个切片但是发生异常的时候。下图描述了 nil 切片的状态:

图片

空切片和 nil 切片稍有不同,下面的代码分别通过 make() 函数和字面量的方式创建空切片:

num := make([]int, 0)      // 使用 make 创建空的整型切片

num := []int{}             // 使用切片字面量创建空的整型切片

空切片的底层数组中包含 0 个元素,也没有分配任何存储空间。想表示空集合时空切片很有用,比如,数据库查询返回 0 个查询结果时。

不管是使用 nil 切片还是空切片,对其调用内置函数 append()、len() 和 cap() 的效果都是一样的。

共享底层数组的切片

需要注意的是:现在两个切片 num 和 myNum 共享同一个底层数组。如果一个切片修改了该底层数组的共享部分,另一个切片也能感知到:

// 修改 myNum 索引为 1 的元素
// 同时也修改了原切片 num 的索引为 2 的元素
myNum[1] = 35

把 35 赋值给 myNum 索引为 1 的元素的同时也是在修改 num 索引为 2 的元素:

图片

切片只能访问到其长度内的元素

切片只能访问到其长度内的元素,试图访问超出其长度的元素将会导致语言运行时异常。在使用这部分元素前,必须将其合并到切片的长度里。下面的代码试图为 num 中的元素赋值:

// 修改 newNum 索引为 3 的元素
// 这个元素对于 newNum 来说并不存在
newNum[3] = 45

上面的代码可以通过编译,但是会产生运行时错误:panic: runtime error: index out of range

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 数据结构
    +关注

    关注

    3

    文章

    564

    浏览量

    39900
  • 数组
    +关注

    关注

    1

    文章

    409

    浏览量

    25595
  • 切片
    +关注

    关注

    1

    文章

    22

    浏览量

    8414
收藏 人收藏

    评论

    相关推荐

    PCB设计:层数设计的关键要点

    在PCB的EMC设计考虑中,首先涉及的便是层的设置;单板的层数由电源、地的层数和信号层数组成;电源层、地层、信号层的相对位置以及电源、地平面的分割对单板的EMC指标至关重要。
    的头像 发表于 11-22 09:28 784次阅读
    PCB设计:<b class='flag-5'>层数</b>设计的关键要点

    cRIO采集9215数据上下位机之间怎么实时传递数据?共享变量?

    ,这样就需要将底层采集的数据实时进行处理,但是我通过共享变量的方式进行处理的时候发现的问题:1,共享变量设置为网络共享变量,数据类型为数组
    发表于 01-05 14:01

    LabView与通过OPC创建PLC数组共享变量

    本帖最后由 地图对比 于 2020-3-31 13:58 编辑 如题所示:LabView如何与PLC通过OPC建立通讯方式,并且创建数组共享变量能够直接与PLC的数组实现数据的读写功能
    发表于 03-31 13:55

    如何与ctypes库创建的数组共享内存空间?

    。那么,如何使用ctypes库定义一个与numpy共享内存空间的数组变量呢?仍以上面的例子,定义一个uint8类型的数组b,与a数组共享内存
    发表于 01-15 16:01

    实时修改Vega底层数据的新方法及其应用

    Vega提供了扩充自定义模块的功能。实现扩充的动态性通常只要在运行前设置其运动属性即可,而实现动态地形必须实时修改底层数据。该文提出一种修改Vega底层数据的方法,为Vega
    发表于 04-18 10:14 13次下载

    什么是Golan无线模块

    什么是Golan无线模块  Intel PRO/Wireless 3945ABG Network Connection将包含802.11e服务质量支持,支持VoIP等实时应用通过无线连接的实时传输。
    发表于 01-21 11:15 317次阅读

    网络切片的分类 网络切片粒度如何选择

    切片 拥有独立功能的切片,包括控制面、用户面及各种业务功能模块,为特定用户群提供独立的端到端专网服务或者部分特定功能服务。 2、共享切片 其资源可供各种独立
    的头像 发表于 09-03 17:01 3201次阅读

    PCB电路板切片的分析

    目的:  电路板品质的好坏、问题的发生与解决、制程改进的评估,在都需要切片做为客观检查、研究与判断的根据。切片质量的好坏,对结果的判定影响很大。  切片分析主要用于检查PCB内部走线厚度、层数
    发表于 10-19 15:28 8458次阅读
    PCB电路板<b class='flag-5'>切片</b>的分析

    底层数据库是什么

    底层数据库系统原理
    发表于 01-11 14:25 0次下载

    SystemVerilog中数组的赋值、索引和切片

    数组可以作为参数传递给子程序,当数组作为值传递给子程序时,会将这个数组复制一份传递给子程序。
    的头像 发表于 10-20 10:13 3909次阅读

    Go切片的内部实现

    切片 Go中提供了一种灵活,功能强悍的内置类型Slices切片(“动态数组"),与数组相比切片的长度是不固定的,可以追加元素,在追加时可能使
    的头像 发表于 10-09 09:43 366次阅读
    Go<b class='flag-5'>切片</b>的内部实现

    golang通过切片创建新的切片

    通过切片创建新的切片 切片之所以被称为切片,是因为创建一个新的切片,也就是把底层数组切出一部分。
    的头像 发表于 10-09 09:48 441次阅读
    golang通过<b class='flag-5'>切片</b>创建新的<b class='flag-5'>切片</b>

    数组中如何增加切片的容量

    切片扩容 相对于数组而言,使用切片的一个好处是:可以按需增加切片的容量。 Golang 内置的 append() 函数会处理增加长度时的所有操作细节。要使用 append() 函数,需
    的头像 发表于 10-09 10:01 390次阅读
    <b class='flag-5'>数组</b>中如何增加<b class='flag-5'>切片</b>的容量

    Redis底层数据类型

    1. 前言 Redis的键值对中的常见数据类型有String (字符串)、List(列表)、Hash(哈希)、Set(集合)、Zset(有序集合)。那么其对应的底层数据结构有SDS(simple
    的头像 发表于 10-09 14:05 194次阅读
    Redis<b class='flag-5'>底层数</b>据类型

    redis的五种数据类型底层数据结构

    Redis是一种内存数据存储系统,支持多种数据结构。这些数据结构不仅可以满足常见的存储需求,还能够通过其底层数据结构提供高效的操作和查询。以下是Redis中常用的五种数据类型及其底层数
    的头像 发表于 11-16 11:18 383次阅读