golang之数组与切片
数组
数组可以存放多个同一类型数据,数组也是一种数据类型,在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之数组与切片的更多相关文章
- golang笔记——数组与切片
一.切片的定义 我们可以从数组(go语言中很少直接使用数组)或者切片来初始化一个新的切片,也可以直接通过 make 来初始化一个所有元素为默认零值的切片. //1.通过数组来初始化切片 arr := ...
- GoLang笔记-数组和切片,本质是就是长度不可变的可变的区别
数组 Arrays 数组是内置(build-in)类型,是一组同类型数据的集合,它是值类型,通过从0开始的下标索引访问元素值.在初始化后长度是固定的,无法修改其长度.当作为方法的入参传入时将复制一份数 ...
- 『GoLang』数组与切片
数组 数组是具有相同唯一类型的一组已编号且长度固定的数据项序列(这是一种同构的数据结构):这种类型可以是任意的原始类型例如整型.字符串或者自定义类型. 数组长度必须是一个常量表达式,并且必须是一个非负 ...
- 深入学习golang(1)—数组与切片
数据(array)与切片(slice) 数组声明: ArrayType = "[" ArrayLength "]" ElementType . 例如: va ...
- golang中数组与切片的区别
初始化:数组需要指定大小,不指定也会根据初始化的自动推算出大小,不可改变 数组: a := [...],,} a := [],,} 切片: a:= [],,} a := make([]) a := m ...
- Golang 数组、切片、映射
定义数组 var arr1 [5]int //整型类型 fmt.Println(arr1) //[0 0 0 0 0] //赋值 arr1 = [5]int{1, 2, 3, 4, 5} fmt.Pr ...
- 手把手golang教程【二】——数组与切片
本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是golang专题的第五篇,这一篇我们将会了解golang中的数组和切片的使用. 数组与切片 golang当中数组和C++中的定义类似, ...
- [Golang学习笔记] 07 数组和切片
01-06回顾: Go语言开发环境配置, 常用源码文件写法, 程序实体(尤其是变量)及其相关各种概念和编程技巧: 类型推断,变量重声明,可重名变量,类型推断,类型转换,别名类型和潜在类型 数组: 数组 ...
- 换个语言学一下 Golang (6)——数组,切片和字典
在上面的章节里面,我们讲过Go内置的基本数据类型.现在我们来看一下Go内置的高级数据类型,数组,切片和字典. 数组(Array) 数组是一个具有相同数据类型的元素组成的固定长度的有序集合.比如下面的例 ...
随机推荐
- Codeforces Round #597 (Div. 2)
A - Good ol' Numbers Coloring 题意:有无穷个格子,给定 \(a,b\) ,按以下规则染色: \(0\) 号格子白色:当 \(i\) 为正整数, \(i\) 号格子当 \( ...
- ubuntu中编译安装gcc 9.2.0
一切都和其他源码安装软件是一样的: 一.下载源代码: http://ftp.gnu.org/gnu/gcc/gcc-9.2.0/gcc-9.2.0.tar.xz 二.解压文件 tar xvf gcc- ...
- elasticsearch alias
索引别名API允许使用一个名字来作为一个索引的别名,所有API会自动将别名转换为实际的索引名称. 别名也可以映射到多个索引,别名不能与索引具有相同的名称.别名可以用来做索引迁移和多个索引的查询统一,还 ...
- Arts打卡第8周
Algorithm.主要是为了编程训练和学习. 每周至少做一个 leetcode 的算法题(先从Easy开始,然后再Medium,最后才Hard). 进行编程训练,如果不训练你看再多的算法书,你依然不 ...
- 命令行运行Python脚本时传入参数的三种方式
原文链接:命令行运行Python脚本时传入参数的三种方式(原文的几处错误在此已纠正) 如果在运行python脚本时需要传入一些参数,例如gpus与batch_size,可以使用如下三种方式. pyth ...
- PHP中定义常量的区别,define() 与 const
正文 在PHP5.3中,有两种方法可以定义常量: 使用const关键字 使用define()方法 const FOO = 'BAR'; define('FOO','BAR'); 这两种方式的根本区 ...
- Centos7 安装svn步骤(宝塔面板)
1.运行以下命令安装SVN yum install subversion 2.运行以下命令创建目录 mkdir /var/svn 3.依次运行以下命令创建版本库 cd /var/svn svnad ...
- ctl +→ = MAC 触控板三指手势
我只想发一个这个:一直用外接显示器,但是不舍得抛弃全屏程序的切换,即:触控板三指手势. 期间各种百度无果,最多找到出最多的是触发角: 今天终于发现了:ctl +→ = MAC 触控板三指手势 (外 ...
- Qt编写控件属性设计器2-拖曳控件
一.前言 上一篇文章把插件加载好了,并且把插件中的所有控件都显示到了列表框中,这次要做的就是实现拖曳控件的功能,用户选择一个控件拖曳到画布上,松开,在松开位置处自动实例化该控件,这个需要用到dropE ...
- 分析spring事务@Transactional注解在同一个类中的方法之间调用不生效的原因及解决方案
问题: 在Spring管理的项目中,方法A使用了Transactional注解,试图实现事务性.但当同一个class中的方法B调用方法A时,会发现方法A中的异常不再导致回滚,也即事务失效了. 当这个方 ...