相同点

  • 由相同类型的元素组合构成
  • 元素有序排列,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. WPF 中使用附加属性,将任意 UI 元素或控件裁剪成圆形(椭圆)

    不知从什么时候开始,头像流行使用圆形了,于是各个平台开始追逐显示圆形裁剪图像的技术.WPF 作为一个优秀的 UI 框架,当然有其内建的机制支持这种圆形裁剪. 不过,内建的机制仅支持画刷,而如果被裁剪的 ...

  2. Roslyn 入门:使用 Visual Studio 的语法可视化窗格查看和了解代码的语法树

    使用 Visual Studio 提供的 Syntax Visualizer,我们可以实时看到一个代码文件中的语法树.这对我们基于 Roslyn 编写静态分析和修改工具非常有帮助.本文将介绍如何安装它 ...

  3. JAVA验证身份证号码是否合法

    package com.chauvet.utils; import java.text.ParseException; import java.text.SimpleDateFormat; impor ...

  4. Appium+python (3) 元素定位(1)

    打开问价夹下面的uiautomatorviewer: 夜神模拟器里的App后,回到uiautomatorviewer: 点击左上角的Device Screenshot,这时你的夜神模拟器页面就会显示在 ...

  5. rem自适应原理

    rem自适应原理 rem是根据html的font-size大小来变化,正是基于这个出发,我们可以在每一个设备下根据设备的宽度设置对应的html字号,从而实现了自适应布局.更多介绍请看这篇文章:rem是 ...

  6. MkDocs 搭建试用

    http://www.mkdocs.org/备注:    在平时的开发中文档管理是一个比较重要的部分,同时集成在 平时开发的持续集成中,可以加速开发   1. 安装 pip install mkdoc ...

  7. Java 设计模式之抽象工厂模式(三)

    原文地址:Java 设计模式之抽象工厂模式(三) 博客地址:http://www.extlight.com 一.前言 上篇文章 <Java 设计模式之工厂模式(二)>,介绍了简单工厂模式和 ...

  8. zk中文乱码问题

    之前讲了怎么把数据导入到zookeeper(见zookeeper事件监听的importData方法),虽然本机win10的zookeeper展示没问题,但到了linux上就出现乱码了: << ...

  9. Ubuntu : 在主机和虚拟机之间传文件

    电脑用的是windows的系统,vmware player打开了一台ubuntu虚拟机,想在它们之间传送文件. 在宿主机上安装FTP文件传输软件 步骤如下: 1.Ubuntu中安装ssh,命令:sud ...

  10. linux 下apache 停止、重启等操作

    基本的操作方法:本文假设你的apahce安装目录为/usr/local/apache2,这些方法适合任何情况 apahce启动命令:推荐/usr/local/apache2/bin/apachectl ...