视频教程分类
推荐视频教程
  • php程序员小白到大牛三个月集训php程序员小白到大牛三个月集训
  • Laravel 9 学习正当时—保姆级教程,想学不会都难!Laravel 9 学习正当时—保姆级教程,想学不会都难!
  • 千万级数据并发解决方案(理论+实战)千万级数据并发解决方案(理论+实战)
  • Laravel基础与实战(模块化)Laravel基础与实战(模块化)
  • 首页 >后端开发 >Golang > 正文

    聊聊go语言中的切片(slice)

    转载2022-07-04 20:51:14548 关注公众号:每天精选资源文章推送
    本篇文章带大家了解一下golang中可变长度的"数组"——切片(slice),希望对大家有所帮助!

    golang切片(slice)

    (1)切片的定义

    切片(Slice)是一个拥有相同类型元素的可变长度的序列。它是基于数组类型做的一层封装。它非常灵活,支持自动扩容。

    切片是一个引用类型,它的内部结构包含地址、长度和容量。切片一般用于快速地操作一块数据集合。【相关推荐:Go视频教程

    创建切片跟创建数组唯一的区别在于 Type 前的“ [] ”中是否有数字,为空,则代表切片,否则则代表数组。因为切片是长度可变的

    var a []string  //声明一个字符串切片
    var b = []int{1,2,3} //声明一个整数类型切片并初始化
    var c = []bool{false,true} //声明一个bool类型并且初始化

    其实在实际情况下,很多时候都是理解成:切片是数组的一部分

    num:=[3]int{0,1,2}
    //:前后表示数组内部的索引
    sc1:=num[:] //获取数组的全部
    sc2:=num[0:2] //左闭右开,取到的是[0,1]
    sc3:=num[1:] //取到的是[2]
    sc4:=num[:1]  //取到的是[0]

    (2)使用make函数创造切片

    这里就开始对应上前面的说法,切片的容量的可变的,用make函数就可以实现,切片的本质就是对底层数组的封装,它包含了三个信息:底层数组的指针、切片的长度(len)和切片的容量(cap)。

    // make([]T, size, cap)
    sc=make([]int,2,10)
    fmt.Println(sc) // [0 0]
    fmt.Println(len(sc)) // len表示切片存储元素的长度
    fmt.Println(cap(sc)) // cap表示最大可以存储的容量

    (3)切片的遍历

    sc:=[]int{1,2,3}
    //普通for循环遍历
    for i:=0;i<len(sc);i++{
    	fmt.Println(s[i])
    }
    //for range遍历
    for index,value:=range s{
    	fmt.Println(index,value)
    }

    (4)append()方法

    Go语言的内建函数append()可以为切片动态添加元素。 可以一次添加一个元素,可以添加多个元素,也可以添加另一个切片中的元素(后面加…)。

    var s1 []int  //定义切片s1
    s1 = append(s1,1)  //在切片s1后面添加一个1的元素
    s1 = append(s1,2,3,4) //在切片s1后面继续添加2,3,4
    s2:=[]int{5,6,7}  //定义切片s2
    s1 = append(s1,s2) //把切片s2中的元素追加到切片s1中

    (5)copy方法

    Go语言内建的copy()函数可以迅速地将一个切片的数据复制到另外一个切片空间中,copy()函数的使用格式如下:

    a:=[]int{1,2,3,4,5}
    b:=make([]int,5,5)
    copy(b,a) //把a切片中的元素copy到b切片中的元素
    fmt.Println(b) //[1,2,3,4,5]
    b[0]=1000
    fmt.Println(b) // [1000,2,3,4,5]

    这里有个问题需要注意的是,在实际开发中存在这样的问题

    a := []int{1, 2, 3, 4, 5}
    b := a
    fmt.Println(a) //[1 2 3 4 5]
    fmt.Println(b) //[1 2 3 4 5]
    b[0] = 1000
    fmt.Println(a) //[1000 2 3 4 5]
    fmt.Println(b) //[1000 2 3 4 5]
    /*
    由于切片是引用类型,所以a和b其实都指向了同一块内存地址。
    修改b的同时a的值也会发生变化。
    */

    (6)巧妙删除切片中的元素

    Go语言中并没有删除切片元素的专用方法,我们可以使用切片本身的特性来删除元素。 代码如下:

    // 从切片中删除元素
    a := []int{30, 31, 32, 33, 34, 35, 36, 37}
    // 要删除索引为2的元素
    a = append(a[:2], a[3:]...)
    fmt.Println(a) //[30 31 33 34 35 36 37]
    /*
    总结一下就是:要从切片a中删除索引为index的元素,
    操作方法是a = append(a[:index], a[index+1:]...)
    */

    更多编程相关知识,请访问:编程视频!!

    以上就是聊聊go语言中的切片(slice)的详细内容,更多请关注php中文网其它相关文章!

    20期PHP线上班

    声明:本文转载于:csdn,如有侵犯,请联系admin@php.cn删除

  • 相关标签:go语言 golang 切片
  • 推荐:PHP从基础到实战教程视频

    相关文章

    相关视频


    专题推荐