广告
返回顶部
首页 > 资讯 > 后端开发 > GO >golang-切片slice的创建方式
  • 927
分享到

golang-切片slice的创建方式

2024-04-02 19:04:59 927人浏览 独家记忆
摘要

在创建一个新的切片是都会先创建一个长度为len的数组,并为其开辟一个cap长度为cap的额外空间,所以在cap范围类增加元素,数组的起始地址不会改变,否则会创建一个新的数组,即起始的

在创建一个新的切片是都会先创建一个长度为len的数组,并为其开辟一个cap长度为cap的额外空间,所以在cap范围类增加元素,数组的起始地址不会改变,否则会创建一个新的数组,即起始的位置发生改变

数组创建

代码


intArr:=[...]int{1,2,3,4,5,6,7,9}
//方式一指定开始和结束
s:=intArr[1:3]
//方式er指定开始和结束+容量
s:=intArr[1:3:6]

创建后的slice

[a: b :c]

a:起始位置

b:截取数据的结束位置 默认到末端)

c:截取后的容量位置 默认到末端)

len为截取的元素长度 即:(3 - 1=2)

cap为截取的起始元素到素组最后一个元素的长度 即:

(原数组长度:8 - 起始元素1=7)

底层数组: 为原数组的截取的起始元素到素组最后一个元素

在这里插入图片描述

make创建

代码


s:=make([]int,10,20)

创建后的slice

len为:10

cap为:20(在创建时指定)

底层数组: 长度为10的数组

slice扩容

在cap范围内不会创建新的底层数组

超过cap则会创建新的数组 ,生成新的cap和len 超过cap也会的

补充:golang 中使用数组创建slice时的注意事项

golang中,slice是对固定长度数组的一段切片,其底层是用对数值空间的指针实现的。

Golang中当使用一个数组来创建slice时如:


var array [5]int = [5]int{1,2,3,4,5}
//切割出数组中的4个值,创建一个slice
myslice := array[0:4]

打印array的值为:

1, 2, 3, 4, 5

打印Mysqlice的值为:

1, 2, 3, 4

现在我们对myslice进行append操作


myslice = append(myslice,100)

打印array的值为:

1, 2, 3, 4, 100

打印mysqlice的值为:

1, 2, 3, 4, 100

现在我们再对myslice进行修改操作


myslice[0] = 50

打印array的值为:

50, 2, 3, 4, 100

打印mysqlice的值为:

50, 2, 3, 4, 100

当slice的长度没有超过创建是的数组的长度时,slice还是指向的创建时使用的数组。

但是!

现在myslice的长度已经和用来创建slice时使用的数组的长度一致了

我们再对myslice进行append操作,让myslice的长度大于创建时使用的数组的长度


myslice = append(myslice,200)

打印array的值为:

50, 2, 3, 4, 100

打印mysqlice的值为:

50, 2, 3, 4, 100, 200

myslice不是通过指针的方式跟arr建立关联的吗?为毛这种情况却没有改变arr的值呢?

因为当myslice超出arr的长度时,Go语言会隐含式地对array做了copy,并让myslice内部的指针重新指向了新数值,所以一切预期中修改array的值的操作,都不会生效!

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。如有错误或未考虑完全的地方,望不吝赐教。

您可能感兴趣的文档:

--结束END--

本文标题: golang-切片slice的创建方式

本文链接: https://www.lsjlt.com/news/124618.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • golang-切片slice的创建方式
    在创建一个新的切片是都会先创建一个长度为len的数组,并为其开辟一个cap长度为cap的额外空间,所以在cap范围类增加元素,数组的起始地址不会改变,否则会创建一个新的数组,即起始的...
    99+
    2022-11-12
  • 一文浅析Golang中的切片(Slice)
    本篇文章带大家学习一下Golang,聊聊Go语言基础中的切片(Slice),希望对大家有所帮助。1.切片的定义从上一节我们知道,因为数组的长度是固定的并且数组长度属于类型的一部分,数组a中已经有三个元素了,我们不能再继续往数组a中添加新元素...
    99+
    2023-05-14
    切片 Golang go语言 Go
  • 深入了解Golang中Slice切片的使用
    目录写在前面上代码分析原因总结写在前面 周日下午在家学习,看到一个关于切片的问题,在网上找了一些资料,做个总结。 上代码 func main() { sl := make([]in...
    99+
    2023-02-27
    Golang Slice切片使用 Golang Slice切片 Golang Slice
  • 浅谈Golang 切片(slice)扩容机制的原理
    我们知道 Golang 切片(slice) 在容量不足的情况下会进行扩容,扩容的原理是怎样的呢?是不是每次扩一倍?下面我们结合源码来告诉你答案。 一、源码 Version : go...
    99+
    2022-11-12
  • 浅谈Golang Slice切片如何扩容的实现
    目录一、Slice数据结构是什么?二、详细代码1.数据结构2.扩容原则3.如何理解扩容规则一1.当小于1024个元素时2.当大于1024个元素时4.如何理解扩容规则二1.简单理解内存...
    99+
    2022-11-13
  • golang 删除切片的某个元素及剔除切片内的零值方式
    看代码吧~ func remove(slice []interface{}, elem interface{}) []interface{}{ if len(slice)...
    99+
    2022-11-12
  • Go slice切片make生成append追加copy复制的方法
    这篇文章主要介绍“Go slice切片make生成append追加copy复制的方法”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Go slice切片make生成append追加...
    99+
    2023-07-02
  • 详解Python中的__getitem__方法与slice对象的切片操作
    Fib实例虽然能作用于for循环,看起来和list有点像,但是,把它当成list来使用还是不行,比如,取第5个元素: >>> Fib()[5] Traceback (most rece...
    99+
    2022-06-04
    切片 详解 对象
  • golang 切片的三种使用方式及区别的说明
    概念 切片(slice)是建立在数组之上的更方便,更灵活,更强大的数据结构。切片并不存储任何元素而只是对现有数组的引用。 三种方式及细节案例 ①定义一个切片,然后让切片去引用一个已经...
    99+
    2022-11-12
  • golang切片扩容的方法是什么
    在Go语言中,切片的扩容是通过使用内置函数append()来实现的。当切片的长度不够容纳新元素时,append()函数会创建一个新的...
    99+
    2023-10-21
    golang
  • golang切片扩容规则的实现方法
    这篇文章主要介绍golang切片扩容规则的实现方法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!golang扩容规则举个例子来演示下package mainimport ("fmt&qu...
    99+
    2023-06-06
  • 实现Golang二维切片初始化的方法
    这篇文章主要讲解了“实现Golang二维切片初始化的方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“实现Golang二维切片初始化的方法”吧!golang适合做什么golang可以做服务器...
    99+
    2023-06-14
  • golang删除切片元素的方法有哪些
    这篇文章主要介绍“golang删除切片元素的方法有哪些”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“golang删除切片元素的方法有哪些”文章能帮助大家解决问题。方法一:使用 append 函数删除...
    99+
    2023-07-05
  • Golang切片删除指定元素的方法有哪些
    这篇文章主要介绍了Golang切片删除指定元素的方法有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Golang切片删除指定元素的方法有哪些文章都会有所收获,下面我们一起来看看吧。前言Go 并没有提供删除切...
    99+
    2023-07-02
  • 总结Golang中删除切片元素的常用方法
    在Golang中,切片是一种非常常用的数据类型。在进行数据处理时,我们常常会遇到需要删除切片中某些元素的情况。本文将介绍Golang中常用的删除切片元素的方法。一、使用append函数删除切片元素在Golang中,使用append函数可以对...
    99+
    2023-05-14
  • Golang切片删除指定元素的三种方法对比
    目录前言1.截取法(修改原切片)2.拷贝法(不改原切片)3.移位法(修改原切片)3.1 方式一3.2 方式二4.性能对比5.小结前言 Go 并没有提供删除切片元素专用的语法或函数,需...
    99+
    2022-11-13
  • Golang中删除切片元素的常用方法有哪些
    这篇文章主要介绍“Golang中删除切片元素的常用方法有哪些”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Golang中删除切片元素的常用方法有哪些”文章能帮助大家解决问题。一、使用append函数...
    99+
    2023-07-05
  • 线程的创建方式
    作者简介: zoro-1,目前大二,正在学习Java,数据结构,mysql,javaee等 作者主页: zoro-1的主页 欢迎大家点赞 👍 收藏 ⭐ 加关注哦!💖💖 线程的创建...
    99+
    2023-12-23
    android java 开发语言
  • Go语言基础切片的创建及初始化示例详解
    目录概述语法一、创建和初始化切片make字面量二、使用切片赋值和切片切片增长遍历切片总结总示例示例一  两个slice是否相等示例二  两个数字是否包含概述 ...
    99+
    2022-11-12
  • Go语言基础切片的创建及初始化示例分析
    这篇文章主要介绍“Go语言基础切片的创建及初始化示例分析”,在日常操作中,相信很多人在Go语言基础切片的创建及初始化示例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Go语言基础切片的创建及初始化示例分析...
    99+
    2023-06-25
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作