数组

数组可以存放多个同一类型数据,数组也是一种数据类型,在Go中,数组是值类型。

数组的定义:

  var 数组名 [数组大小]数据类型

  var a [5]int

  赋初值   a[0] = 1    a[1] = 30 ....

数组在内存布局

总结:

  1)数组的地址可以通过数组名来获取 &intArr

  2)数组的第一个元素的地址,就是数组的首地址

  3)数组的各个元素的地址间隔是依据数组的类型决定,比如int64——>8    int32——>4 ....

数组遍历:

  for-range

    这是Go语言一种独有的结构,可以用来遍历访问数组的元素

    用法:

      for index, value := range array01 {

      ...

      }

注意事项和使用细节:

  1)数组是多个相同类型数据的组合,一个数组一旦声明/定义了,其长度是固定的,不能动态变化

  2)var arr []int 这时arr就是一个slice切片

  3)数组中的元素可以是任何数据类型,包括值类型和引用类型,但是不能混用

  4)数组创建后,如果没有赋值,有默认值0

  5)使用数组的步骤 1. 声明数组并开辟空间  2.给数组各个元素赋值  3.使用数组

  6)数组的下标是从0开始的

  7)数组下标必须在指定范围内使用,否则报panic:数组越界

  8)Go的数组属值类型,在默认情况下是值传递,因此会进行值拷贝,数组间不会相互影响

  9)如想在其它函数中,去修改原来的数组,可以使用引用传递(指针方式)、

  10)长度是数组类型的一部分,在传递函数参数时需要考虑数组的长度。

四种初始化数组的方式:

var numsArray01 [3]int = [3]int {1, 2, 3}
var numsArray02 = [3]int {1, 2, 3}
var numsArray03 = [...]int {6, 7, 8}
var names = [3]string{1: "tom", 0: "jack", 2: "marry"}

 切片(slice)

 

切片是引用类型数据,存储了底层数组引用

切片是数组的一个引用,因此切片是,引用类型,在进行传递时,遵守引用 传递的机制。

切片的长度是可以变化的,因此切片是一个可以动态变化的数组。

基本语法 :

  var 变量名 []类型

定义切片的三种方式:

1.定义一个切片,然后切片去引用一个已经创建好的数组,比如前面的案例就是这样的。(数组是可见的)

2.通过make创建切片:(make会创建一个数组,但是是不可见的)

  语法:var 切片名 []type = make([]type, len, [cap])

    var slice []float64 = make([]float64, 5, 10)
slice[1] = 10
slice[3] = 20 fmt.Println(slice)
fmt.Println(len(slice))
fmt.Println(cap(slice))

3.定义一个直接就指定具体数组,使用原理类似make的方式

append(slice, 100)

copy(slice, slice2)

4.append操作切片时:内置函数append会首先使用可用容量,一旦没有可用容量,会分配一个新的底层数组。

5.定义公式来计算新切片的长度和容量:

slice[i:j:k]    或  slice[2:3:4]

长度:j - i 或 3-2
容量:k-i 或 4-2

6.for  range迭代切片时,第一个值是当前迭代到的索引位置,第二个值是该位置对应元素值的一份副本。

golang之数组与切片的更多相关文章

  1. golang笔记——数组与切片

    一.切片的定义 我们可以从数组(go语言中很少直接使用数组)或者切片来初始化一个新的切片,也可以直接通过 make 来初始化一个所有元素为默认零值的切片. //1.通过数组来初始化切片 arr := ...

  2. GoLang笔记-数组和切片,本质是就是长度不可变的可变的区别

    数组 Arrays 数组是内置(build-in)类型,是一组同类型数据的集合,它是值类型,通过从0开始的下标索引访问元素值.在初始化后长度是固定的,无法修改其长度.当作为方法的入参传入时将复制一份数 ...

  3. 『GoLang』数组与切片

    数组 数组是具有相同唯一类型的一组已编号且长度固定的数据项序列(这是一种同构的数据结构):这种类型可以是任意的原始类型例如整型.字符串或者自定义类型. 数组长度必须是一个常量表达式,并且必须是一个非负 ...

  4. 深入学习golang(1)—数组与切片

    数据(array)与切片(slice) 数组声明: ArrayType   = "[" ArrayLength "]" ElementType . 例如: va ...

  5. golang中数组与切片的区别

    初始化:数组需要指定大小,不指定也会根据初始化的自动推算出大小,不可改变 数组: a := [...],,} a := [],,} 切片: a:= [],,} a := make([]) a := m ...

  6. Golang 数组、切片、映射

    定义数组 var arr1 [5]int //整型类型 fmt.Println(arr1) //[0 0 0 0 0] //赋值 arr1 = [5]int{1, 2, 3, 4, 5} fmt.Pr ...

  7. 手把手golang教程【二】——数组与切片

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是golang专题的第五篇,这一篇我们将会了解golang中的数组和切片的使用. 数组与切片 golang当中数组和C++中的定义类似, ...

  8. [Golang学习笔记] 07 数组和切片

    01-06回顾: Go语言开发环境配置, 常用源码文件写法, 程序实体(尤其是变量)及其相关各种概念和编程技巧: 类型推断,变量重声明,可重名变量,类型推断,类型转换,别名类型和潜在类型 数组: 数组 ...

  9. 换个语言学一下 Golang (6)——数组,切片和字典

    在上面的章节里面,我们讲过Go内置的基本数据类型.现在我们来看一下Go内置的高级数据类型,数组,切片和字典. 数组(Array) 数组是一个具有相同数据类型的元素组成的固定长度的有序集合.比如下面的例 ...

随机推荐

  1. C++标准库分析总结(二)——<模板,分配器,List>

    本节主要总结模板及其类模板分类以及STL里面的分配器.容器内部结构以及容器之间的关系和分类,还介绍了容器中List的结构分布 1.源代码版本介绍 1.1 VC的编译器源码目录: 2.类模板 2.1 类 ...

  2. C++删除字符串的前后空格

    函数: string trim(string& str) { str.erase(0, str.find_first_not_of(" \t")); // 去掉头部空格 s ...

  3. jquery报变量没定义错误的原因

    该变量定义的范围:不在使用的方法中:

  4. mac 不限速下载大文件

    打开终端后,需要在终端处键入一下代码: 「注意:此处代码不完整, 完整版请 关注微信公众号:「100秒分享」,回复编号「334」获取」 cd ~/Downloads && git cl ...

  5. python 设计模式之 (Chain of Responsibility)责任链模式

    #写在前面 对于每一种设计模式,如果不理解它的原理和结构,是写不出例子来的.所以弄明白很重要. 等过完这段浑浑噩噩的日子,我要找个遍地开花的地方开怀大笑一场 #责任链模式定义 简书上一网友就把这个定义 ...

  6. python 简化数据结构的初始化二 支持关键字参数

    1.例子 学自cookbook3

  7. java生成RSA公私钥字符串,简单易懂

    java生成RSA公私钥字符串,简单易懂   解决方法: 1.下载bcprov-jdk16-140.jar包,参考:http://www.yayihouse.com/yayishuwu/chapter ...

  8. PAT 甲级 1041 Be Unique (20 分)(简单,一遍过)

    1041 Be Unique (20 分)   Being unique is so important to people on Mars that even their lottery is de ...

  9. C# using语句 中间出现exception后 using仍然会dispose

    C# using语句,中间出现exception后,using仍然会dispose,因为: using语句 相当于 try-finally{dispose()}

  10. UIwindow ---密码框

    程序运行显示结果如下 : 验证密码输入错误显示如下: 代码如下 : 1> ////  PasswordInputWindow.m//  UIWindow--密码框////  Created by ...