Go语言里切片slice的用法介绍

1.切片是基于数组做的一层封装,灵活能够自动扩容。

2.切片的初始化方法

①直接创建

②基于已有的数组或切片

③使用make来创建一个切片

第一个5是切片的大小

第二个5是切片的容量

3.基本操作

①获取元素

②增加元素append

当达到底层的最大容量,切片会进行扩容,扩容的策略是翻倍扩容。

下图说明扩容之后,地址也变化了。

4.切片的修改

和数组(值传递)不一样,切片相当于是一个引用传递。

5.如果计算切片的容量?

例如:b切片的长度和容量是多少?

答案: 长度为2 容量为7

详细可以参考下面图,a、b共用底层切片,但是b是从1开始的,长度为3-1 =2,容量为a其他的底层

6.切片后面追加切片

func AppendSlice(){
     slice1 := []int{1,2,3}
     slice2 := []int{3,3,6}

     slice1 = append(slice1,slice2... )

    for _, value := range slice1 {
        fmt.Println("value的地址",value)
    }

}

注意一下 append(slice1,slice2... ) 这个...定义就是把slice2展开,放到slice1后面。

到此这篇关于Go语言切片slice的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • golang-切片slice的创建方式

    在创建一个新的切片是都会先创建一个长度为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:

  • golang常用手册之切片(Slice)原理

    切片,这是一个在go语言中引入的新的理念.它有一些特征如下: 对数组抽象 数组长度不固定 可追加元素 切片容量可增大 容量大小成片增加 我们先把上面的理念整理在这里,但是实际的还是要撸码来解决问题. 定义或申明切片 首先我们看看申明切片: var sliceName []type 定义完成后,我们需要定义切片: sliceName = make([]type, len) 也可以适当简写: sliceName := make([]type, len) 在上面的例子中,我们申明了一个切片,我们现在先

  • 浅谈Golang 切片(slice)扩容机制的原理

    我们知道 Golang 切片(slice) 在容量不足的情况下会进行扩容,扩容的原理是怎样的呢?是不是每次扩一倍?下面我们结合源码来告诉你答案. 一.源码 Version : go1.15.6  src/runtime/slice.go //go1.15.6 源码 src/runtime/slice.go func growslice(et *_type, old slice, cap int) slice { //省略部分判断代码 //计算扩容部分 //其中,cap : 所需容量,newcap

  • Golang slice切片操作之切片的追加、删除、插入等

    本文介绍了Golang slice切片操作之切片的追加.删除.插入等,分享给大家,具体如下: 一.一般操作 1,声明变量,go自动初始化为nil,长度:0,地址:0,nil func main(){ var ss []string; fmt.Printf("length:%v \taddr:%p \tisnil:%v",len(ss),ss, ss==nil) } --- Running... length:0 addr:0x0 isnil:true Success: process

  • 浅谈Golang Slice切片如何扩容的实现

    目录 一.Slice数据结构是什么? 二.详细代码 1.数据结构 2.扩容原则 3.如何理解扩容规则一 1.当小于1024个元素时 2.当大于1024个元素时 4.如何理解扩容规则二 1.简单理解内存地址更换 总结 一.Slice数据结构是什么? 切片(slice)是 Golang 中一种比较特殊的数据结构,这种数据结构更便于使用和管理数据集合.切片是围绕动态数组的概念构建的,可以按需自动增长和缩小.切片(slice)是可以看做是一个长度可变的数组.切片(slice)自身并不是动态数组或者数组指

  • 浅谈golang slice 切片原理

    slice介绍 数组的长度在定义之后无法再次修改:数组是值类型,每次传递都将产生一份副本.显然这种数据结构无法完全满足开发者的真实需求.在初始定义数组时,我们并不知道需要多大的数组,因此我们就需要"动态数组".在Go里面这种数据结构叫slice,slice并不是真正意义上的动态数组,而是一个引用类型.slice总是指向一个底层array,slice的声明也可以像array一样,只是不需要长度,它是可变长的,可以随时往slice里面加数据. 初看起来,数组切片就像一个指向数组的指针,实际

  • 理解Golang中的数组(array)、切片(slice)和map

    我比较喜欢先给出代码,然后得出结论 数组 复制代码 代码如下: package main import (     "fmt" ) func main() {     arr := [...]int{1, 2, 3}     //打印初始的指针     fmt.Printf("the pointer is : %p \n", &arr)     printPointer(arr) } func printPointer(any interface{}) {

  • Go语言里切片slice的用法介绍

    1.切片是基于数组做的一层封装,灵活能够自动扩容. 2.切片的初始化方法 ①直接创建 ②基于已有的数组或切片 ③使用make来创建一个切片 第一个5是切片的大小 第二个5是切片的容量 3.基本操作 ①获取元素 ②增加元素append 当达到底层的最大容量,切片会进行扩容,扩容的策略是翻倍扩容. 下图说明扩容之后,地址也变化了. 4.切片的修改 和数组(值传递)不一样,切片相当于是一个引用传递. 5.如果计算切片的容量? 例如:b切片的长度和容量是多少? 答案: 长度为2 容量为7 详细可以参考下

  • go语言中切片Slice与数组Array对比以及panic: runtime error: index out of range问题解决

    目录 前言 一.go slice是什么 二.go slice实战案例 1.slice创建.使用 2.slice的长度和容量概念理解 3. 切片扩容及slice panic: runtime error: index out of range 附:go 判断数组下标是否存在 总结 前言 在go语言的学习历程当中,slice数据类型引起了我的好奇心.为啥不直接使用Slice,是人性的扭曲还是道德的沦丧~,下面让我们一探究竟~~ 一.go slice是什么 go语言中的slice是一个基于Array封

  • Go语言里的new函数用法分析

    本文实例讲述了Go语言里的new函数用法.分享给大家供大家参考.具体如下: 表达式 new(T) 分配了一个零初始化的 T 值,并返回指向它的指针. var t *T = new(T) 或 t := new(T) 代码如下: 复制代码 代码如下: package main import "fmt" type Vertex struct {     X, Y int } func main() {     v := new(Vertex)     fmt.Println(v)     v

  • C语言switch语句和if用法介绍

    目录 switch语句 switch和if的区别 1.switch语句结构示意图 2.if语句结构示意图 switch的高级(灵活)运用 switch的嵌套实现 循环及循环的两个关键字 什么是循环结构 break关键字 continue关键字 switch语句 我们先了解switch是什么,翻译过来的中文意思是开关,在C语言中是指选择不同的开关即不同的分支来完成语句.接下来讲一下switch的结构和基本使用. 一般的switch语句的结构 switch(n){ case 1: 语句1: brea

  • Go语言中循环Loop的用法介绍

    Go语言和其他语言不一样,它只有一种循环方式,就是for语句 可以参考如下公式: for initialisation; condition; post{ //Do Something } 执行顺序 a.执行一次initialisation,初始化 b.判断condition c.条件为true,执行{}内的语句 d.语句执行之后执行post 使用方式举例: 1.基本使用类似其他语言的for func ForTest1(){ for i:=1;i<=10;i++{ fmt.Printf("

  • Go语言--切片(Slice)详解

    目录 一.定义切片 1.声明一个未指定大小的数组来定义切片 2.使用make()函数来创建切片 二.切片是可索引的 1.len() 和 cap() 函数 三.切片截取 四.增加切片的容量 说明: Go 语言切片是对数组的抽象. Go 数组的长度不可改变,在特定场景中这样的集合就不太适用,Go中提供了一种灵活,功能强悍的内置类型切片("动态数组"),与数组相比切片的长度是不固定的,可以追加元素,在追加时可能使切片的容量增大. 一.定义切片 注意:切片不需要说明长度 1.声明一个未指定大小

  • go语言里包的用法实例

    本文实例讲述了go语言里包的用法.分享给大家供大家参考.具体分析如下: 每个 Go 程序都是由包组成的. 程序运行的入口是包 main. 这个程序使用并导入了包 "fmt" 和 "math". 按照惯例,包名与导入路径的最后一个目录一致. 复制代码 代码如下: package main import (  "fmt"  "math" ) func main() {  fmt.Println("Happy",

  • python 多维切片之冒号和三个点的用法介绍

    初学python和numpy,对在学习多维切片的过程中遇到的问题做个总结. 一维切片就不说了,比较简单,先说下二维的,二维的理解了多维的就简单了.举个例子先建立一个5x5的二维数组 多维的切片是按照各个维度分别取 这里就分别输出第一维的2-3和第二维的3-5(索引从0开始). 这里是行取全部,列取第3-5. 这里应该是大家最疑惑的地方了,为什么列的参数改成None,输出的shape都变了,这里大家要知道,None代表新增加一个维度,它有一个别称叫newaxis,大家可以输出一下numpy.new

  • Go语言中的复合类型详细介绍

    golang复合类型包括:结构体.数组.切片.Maps. 1.数组 数组 golang中的数组与C语言中的数组差异很大,倒更类似Pascal中的数组. (Slice,下个话题,有些像C语言中的数组) 复制代码 代码如下: var ar [3]int 声明ar为一个拥有三个整型数的数组,所有元素初始化为0. 大小是类型的一个组成部分. 内置的函数len可以用于获取数组大小: 复制代码 代码如下: len(ar) = 3 数组是值类型 golang中的数组是值,而非C语言中的隐式指针.你可以获得数组

  • Golang切片Slice功能操作详情

    目录 一.概述 二.切片 2.1 切片的定义 2.2 切片的长度和容量 2.3 切片表达式 简单切片表达式 完整切片表达式 2.4 使用make()函数构造切片 2.5 for range循环迭代切片 2.6 切片的本质 2.7 判断切片是否为空 三.切片功能操作 3.1 切片不能直接比较 3.2 切片的赋值拷贝 3.3 使用copy()函数复制切片 3.4 append()方法为切片添加元素 3.5 从切片中删除元素 从开头位置删除 从中间位置删除 从尾部删除 3.6 切片的扩容策略 一.概述

随机推荐