数组

数组可以存放多个同一类型数据,数组也是一种数据类型,在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. python3编程基础之一:量的表示

    计算机的操作最终表现是数据的操纵,为了表示和存储数据,都需要对数据进行引用,计算机可以直接从内存地址实现一步访问数据,但是编程的人却没有这种能力.就像人可能够不到在高处的氢气球,但是可以拉动邦在氢气球 ...

  2. java 通过runtime 调用python 不显示python运行内容的bug

    先说下上面问题的原因,上面问题是因为python中用到了第三方的类库,你的电脑上没有那个类库,所以程序没有运行,在控制台也就看不到输出.只要导入那个类库就好... python 导入类库,可以单独下载 ...

  3. 通俗易懂的Redis数据结构基础教程

    Redis有5个基本数据结构,string.list.hash.set和zset.它们是日常开发中使用频率非常高应用最为广泛的数据结构,把这5个数据结构都吃透了,你就掌握了Redis应用知识的一半了. ...

  4. CodeForces - 1175B Catch Overflow!(栈模拟多重for循环)

    You are given a function ff written in some basic language. The function accepts an integer value, w ...

  5. sklearn中的弹性网函数 ElasticNet

    语法:  ElasticNet(self, alpha=1.0, l1_ratio=0.5, fit_intercept=True, normalize=False, precompute=False ...

  6. Macbook上打开多个终端的方法

    方法有如下两种 1.首先是的焦点在终端上(使用鼠标点击下终端).然后使用快捷键command+N 即可得到另一个终端界面. (如果现在光标的焦点在浏览器上,那么就是新打开一个浏览器窗口) 2.同样,光 ...

  7. File contains parsing errors: file:///etc/yum.repos.d/docker-ce.repo [line 84]: docker-ce-nightly-source]

      错误:File contains parsing errors: file:///etc/yum.repos.d/docker-ce.repo     [line 84]: docker-ce-n ...

  8. vue+Typescript初级入门

    Typescript 在前端圈已经逐渐普及,Vue 2.5.0 改进了类型声明,使得对 TypeScript 更加友好 不过要想在项目中直接使用 TypeScript 仍然需要对项目进行一些改造 PS ...

  9. 放射渐变RadialGradient

    public RadialGradient(float centerX, float centerY, float radius, int[] colors, float[] stops, TileM ...

  10. linux服务器下安装phpstudy 如何命令行进入mysql

    配置了phpstudy 可是进不去mysql 老是报-bash: mysqld: command not found 解决方法:在linux环境下运行:ln -s /phpstudy/mysql/bi ...