zoukankan      html  css  js  c++  java
  • 学习Golang语言(6):类型--切片

    学习Golang语言(1): Hello World

    学习Golang语言(2): 变量

    学习Golang语言(3):类型--布尔型和数值类型

    学习Golang语言(4):类型--字符串

    学习Golang语言(5):类型--数组

    学习Golang语言(6):类型--切片

    在非常多应用场景中,数组不能够满足我们的需求。在初始定义数组时,我们并不知道数组所需的长度。因此,我们须要一个大小能够动态变化的数组(动态数组)

    在Go语言中,这样的“动态数组”成为slice(切片)。

    可是实际上slice并非真正意义上的动态数组,而是一个引用类型。slice总是指向一个底层array,slice的声明能够像array一样。

    可是它不须要声明长度。slice的长度是可变的。

    严格来讲。slice有两个属性容量(capacity)和长度(length),当中容量>=长度。

    切片(slice)的声明

    切片能够通过下面方式创建。

    1、先声明一个变量是切片,再使用内置函数make去初始化这个切片。

        

    这里首先使用make函数定义切片slice1。这个时候slice1的容量=5。长度=5;然后使用make函数定义切片slice2。这个时候slice2的容量=10,长度=5。

    因此能够看出使用make定义切片有两种方式。

    • 仅仅指定长度,这个时候切片长度和容量同样;

    • 同一时候指定切片的长度和容量。

    --------------------注意--------------------

    1、在容量大于长度时候,赋值仍须要注意最大的索引仍然是len(slice)-1,否则会报索引超出边界的错误。

    2、使用:=符号在声明一个切片同一时候初始化数据,例如以下所看到的。

    slice := []byte{'a','b','c','d','e'}

    3、切片能够从数组或者一个已经存在的slice中再次声明。

    切片通过array[i:j]来获取数组index从i到j之间的元素。当中i是開始的位置,j是借宿的位置。

    可是不包括array[j]。长度为j-i。

    ---------------------------------------------

    此外:数组声明时候方括号内须要写明数组的长度或者使用(...)符号自己主动计算长度。而切片声明时。方括号内没有不论什么字符。

    切片另一些简便的操作

    • 切片默认開始位置为0,slice[:n]等价于slice[0:n];

    • 切片的第二个序列默认是数组的长度,slice[n:]等价于slice[n:len(slice)];

    • 假设从一个数组里面直接获取切片。能够这样slice[:],由于默认第一序列为0,第二个序列为len(slice),因此slice[:]等价于slice[0:len(slice)]。

    比如:

    输出结果:

    
    

    由于切片是引用类型。因此当引用改变当中元素的值时候,其它的全部引用都会改变该值。比如:

    输出结果



    当我们把slice1[3]改动为100时候,slice2[0]也变为100.

    ---------------------------------------------

    从概念上看,切片像是一个结构体,包括了三个元素:

    • 一个指向数组中切片指定的開始位置;

    • 长度。即切片的长度,通过内置函数len获得;

    • 最大长度,即切片的最大容量。通过内置函数cap获得。

    ---------------------------------------------

    切片的重要特征:长度可变,能够通过下面样例了解。

    append追加元素

    输出结果


    这里我们初始化slice为容量=8。长度=4的切片。然后为前四个元素赋值并输出结果。

    再者使用Go的内置函数append为slice追加6个元素。

    这个时候查看slice的容量=16和长度=10以及切片元素。发现slice的长度确实变化。

    --------------------注意--------------------

    append进行追加元素时

    • 假设新的切片长度小于容量则不会改变容量。

    • 假设新的切片长度将超过容量。Go会自己主动又一次为切片分配容量。

      容量大小为原先的两倍。

    上述样例看出:容量从原先的8=>16.

    ---------------------------------------------

    上面介绍了使用append函数给切片添加元素,如今再来介绍一个copy函数:用来从一个切片拷贝元素到另一个切片。

    copy复制元素

    输出结果


    在上面的样例中,我们将slice1的元素复制到slice2,由于slice2的长度为5,因此最多拷贝5个元素。

    --------------------总结--------------------

    数组声明时候方括号内须要写明数组的长度或者使用(...)符号自己主动计算长度。

    而切片声明时,方括号内没有不论什么字符。

    由于数组长度固定。而切片长度可变。

    ---------------------------------------------

    欢迎关注码术!一起学习Golang语言。


查看全文
  • 相关阅读:
    Samba 4.0 RC3 发布
    SymmetricDS 3.1.7 发布,数据同步和复制
    Express.js 3.0 发布,Node.js 的高性能封装
    GIFLIB 5.0.1 发布,C语言的GIF处理库
    jQuery UI 1.9.1 发布
    SVN Access Manager 0.5.5.14 发布 SVN 管理工具
    DynamicReports 3.0.3 发布 Java 报表工具
    HttpComponents HttpClient 4.2.2 GA 发布
    AppCan 2.0 正式发布,推移动应用云服务
    Ruby 2.0 的新功能已经冻结
  • 原文地址:https://www.cnblogs.com/ldxsuanfa/p/10957129.html
  • Copyright © 2011-2022 走看看