相同点

  • 由相同类型的元素组合构成
  • 元素有序排列,0为第一个元素下标
  • 基本使用方法相同

区别

array声明时需要指定容量大小,而且无法修改

slice可通过append增加元素,当容量不够时,会自动扩容

array传递类型:值拷贝;slice传递类型:引用拷贝(有两种情况坑)

声明

var array名 [容量]元素类型
array名 :=[3]元素类型{元素1,元素2,元素3} var slice名 []元素类型
slice名 := make([]类型,容量) //建议这样声明
slice名 := []元素类型{元素1,元素2,元素3}
// array或者slice声明后,各元素并不为空,而是该元素类型的 *零 *值 //array声明时还可以让编译器自动导入元素容量
array名 := [10]int{5:199, 8:200} //多维array/slice
//由相同元素类型构成的array/slice 为元素构成的array结构 array名 := [3][2]int{{1,2},{3,5},{9,2}}
slice名 := [][]int{{1,2},{3,5},{9,2}} //元素赋值
a[index] = 值

array/slice容量属性len/cap

  • len

    • len()方法获取array/slice的元素个数
  • cap
    • cap()方法获取array/slice的最大值可存储元素个数
  •   

根据开始我们说的array和slice特性

array: len和cap值时相等的

slice:初始化时,len和cap值是相等的,当append操作达到当前cap临界点时,cap值会增大

此时,len与cap的值是不相等的

array/slice遍历

  • 方法一

    for index, value := rang a{
    fmt.Println(index, value)
    }  
  • 方法二
    for index := range a{
    fmt.Println(a[index])
    }  
  • 方法三
    //len()获取array元素数量
    for i :=0; i<len(a); i++{
    fmt.Println(a[i])
    } 
  • 多维遍历
    b := [3][2]int{{1,2},{3,5},{9,2}}
    for index, value := range b{
    for i, v := range value{
    fmt.Println(index, i. v)
    }
    }  
  • 切片操作
    a := [5]int{10, 20, 30, 40, 50} 
    
    //取出前三个元素, 坐标分别是 0, 1, 2
    b := a[0:3]
    bb := a[:3] //取出第三个元素之后所有元素(包含第3个元素)
    c := a[2:] //取出第2, 3, 4 三个元素
    d := a[1:4]  
slice引⽤用传递的坑 分两种情况: 主slice⾃自动扩容之前 ⾃自动扩容之后

s1 := []int{1, 2}
s2 := s1
fmt.Println(s1[0])
fmt.Println(s2[0])
s1[0] = 100
fmt.Println(s1[0])
fmt.Println(s2[0]) temp := []int{5, 6, 7, 8, 9, 10, 11, 12, 13, 14}
s1 = append(s1, temp...)
s1[0] = 1000
fmt.Println(s1[0])
fmt.Println(s2[0])

  

golang的array/slice的更多相关文章

  1. golang array, slice, string笔记

    本来想写一篇关于golang io的笔记,但是在学习io之前必须了解array, slice, string概念,因此将在下篇写golang io.   array: 数组的长度是该数组类型的一部分, ...

  2. golang之array

    golang使用array表示固定大小的数组,使用slice表示动态数组. package main import "fmt" func main() { var a = [5]i ...

  3. golang笔记——array

    1.定义一个 array 数组长度也是类型的一部分,比如长度为3的int数组与长度为5的int数组,并不是同一类型. package main import ( "strconv" ...

  4. JS之Array.slice()方法

    1.Array.slice(startIndex,endIndex); 返回由原始数组从startIndex到endIndex-1的元素构成的新数组; startIndex:默认值0,如果startI ...

  5. javascript:Array.slice.call 到Array.prototype.slice.call

    举个从对象到数组的例子: var obj={}; obj[1]=1; obj[2]=2; obj.length=2; var arr =Array.prototype.slice.call(obj); ...

  6. [js] Array.slice和类数组转数组

    a.call(b) 相当于把a方法放到b的原型上(实例私有方法)执行 Array.slice的用途 https://juejin.im/post/5b20b8596fb9a01e8d6a47c0 用法 ...

  7. Array.slice(start,end)的用法

    start在start>=0,假设start=0,表示从数组的第一个元素开始截取,start=2,表示从数组的第二个元素开始截取,依次类推. 在start<0时,start=-1表示从倒数 ...

  8. JS - Array.slice 与 Array.splice

    1)Array.slice方法   1.1)接收两个参数:              a:起始下标              b:结束下标   1.2)返回由a(包括)至b(不包括)的元素所组成的数组 ...

  9. golang中Array与Slice

    在golang中有数组和Slice两种数据结构,Slice是基于数组的实现,是长度动态不固定的数据结构,本质上是一个对数组字序列的引用,提供了对数组的轻量级访问.那么在go的函数中以数组或Slice为 ...

随机推荐

  1. flask第二十篇——模板【3】

    请关注公众号:自动化测试实战 现在我们通过查询字符串的方式给render_template传参,我们就要用到flask库的flask.request.args.get()函数先获取参数,在index. ...

  2. {Reship}{Emgu}{vs2010}C#配置Emgu

    =============================================================================================This Ar ...

  3. 【Netty】netty学习之nio了解

    [一]五种IO模型: (1)阻塞IO(2)非阻塞IO(任务提交,工作线程处理,委托线程等待工作线程处理结果的同时,也可以做其他的事情)(3)IO复用模型.(委托线程接收多个任务,将任务提交给工作线程. ...

  4. 使用 lego生成 Let's Encrypt 证书

    1. 工具 https://github.com/xenolf/lego   2. 使用 命令生成新的 lego --email="foo@bar.com" --domains=& ...

  5. wekan 工具配置

    1. 安装     使用docker-compose 安装,主要是方便简单,后期维护比较简单    2. 配置     docker-compose.yaml  文件 version: '2' ser ...

  6. Python函数 hash()

    hash(object)    hash() 用于获取取一个对象(字符串或者数值等)的哈希值.返回对象的哈希值.  实例: >>>hash('test') # 字符串 2314058 ...

  7. hadoop 之Hadoop生态系统

    1.Hadoop生态系统概况 Hadoop是一个能够对大量数据进行分布式处理的软件框架.具有可靠.高效.可伸缩的特点. Hadoop的核心是HDFS和Mapreduce,hadoop2.0还包括YAR ...

  8. Oracle instant client及pl sql developer的使用

    Oracle instant client的使用   最近重装了操作系统,使用的是Windows7 x64的版本,不准备安装Oracle,于是从官网上看到了Instant Client.   兴冲冲下 ...

  9. Errors running builder 'DeploymentBuilder' on project ' 解决方法

    此问题一般发生在Myeclipse 保存文件并自动部署时候. Errors occurred during the build. Errors running builder 'DeploymentB ...

  10. GOF23设计模式之代理模式(proxy)

    一.代理模式概述 1.代理模式的核心作用 (1)通过代理,控制对象的访问: (2)可以详细的控制访问某个(某类)对象的方法,在调用这个方法前做前置处理,调用这个方法后做后置处理.(AOP的微实现)   ...