1. 数组
1.1 如何定义数组
同java数组一样,数组是一组内存连续且类型相同的数据组成

//不初始化初始值默认为0
var arr1 = [5]int{}
var arr2 = [5]int{1,2,3,4,5}
//声明数组下标3的值为10
var arr3 := [3:10]
arr4 := []int{1,2,3,4,5}
//操作数据
for i := 0; i < len(arr1); i++ {
arr1[i] = i * 10
} for index, value := range arr1 {
fmt.Printf("index: %d,value:%d\n", index, value)
} //指定多维数组
arr5 := [5][5]int{
{1,2,3,4,5},
{6,7,8,9,10}
}

  

1.2 数组作为函数参数
在go语言中传递数组时会对其进行拷贝,如果数组非常大,这是会消耗大量内存,我们可以使用一下两种方式代替:

传递数组的指针
传递切片
1.2.1 指针数组
指针数组就是指针类型的数组,一个数组里面装的全是指针,在go中数组默认都是值传递的,所以会导致我们修改函数中传递过来的数组对原来的数组不会产生影响。

 	func main() {
var a [5]int
var aPtr *[5]int
aPtr = &a
//这样简短定义也可以aPtr := &a
fmt.Println(aPtr)
test(aPtr)
fmt.Println(aPtr)
} func test(aPtr *[5]int) {
aPtr[1] = 5
fmt.Println(aPtr)
}

1.2.2 数组指针
指向数组的指针

 	func main() {
var a [5]int
var aPtr *[5]int
aPtr = &a
//这样简短定义也可以aPtr := &a
fmt.Println(aPtr)
test(aPtr)
fmt.Println(aPtr)
} func test(aPtr *[5]int) {
aPtr[1] = 5
fmt.Println(aPtr)
}

  

虽然main和test函数中的aPtr是不同的指针,但是他们都指向同一块数组的内存空间,所以无论在main函数还是在test函数中对数组的操作都会直接改变数组。

2. 切片
因为数组是固定长度的,所以在一些场合下就显得不够灵活,所以go语言提供了一种更为便捷的数据类型叫做切片。切片操作与数组类似,但是它的长度是不固定的,可以追加元素,如果以达到当前切片容量的上限会再自动扩容。
对于任何一个切片来说,其都有一个底层数组与之对应,我们可以将切片看作是一个窗口,透过这个窗口可以看到底层数组的一部分元素

2.1 定义切片

//数组不指定长度
var s1 = []int{}
var s2 = []int{1,2,3}
//长度为5的空切片
var s3 = make([]int,5)
//长度为5 容量为10的切片
var s4 = make([]int,5,10)
//获取切片长度
len(s1)
//获取切片容量
cap(s2) //切片
arr := [5]int{1, 2, 3, 4, 5}
s := []int{6, 7, 8, 9, 10} s1 := arr[2:4] //3,4 包左不包右
s2 := arr[:3]//1,2,3
s3 := arr[2:]//3,4,5
s4 := s[1:3]//7,8 包左不包右 //扩充
a := []int{1, 2, 3}
b := a[1:3]
b = append(b, 4)
b = append(b, 5) //拼接
a := []int{1, 2, 3}
b := a[1:3]
a = append(a, b...)

//复制
func main() {
a := []int{1, 2, 3}
b := make([]int, 3)
copy(b, a)
fmt.Println(a)
fmt.Println(b)
}

  

GoLang数组切片的更多相关文章

  1. Golang 数组 切片 字典 基本知识点

    数组 数组的声明 var arrayName [arraySize]dataType eg: var array1 [5]int 在声明数组时,必须指定数组名,数组长度和数组元素的类型. 数组的初始化 ...

  2. [golang note] 数组切片

    数组 √ golang数组包含的每个数据称为数组元素(element),数组包含的元素个数被称为数组长度(length). √ golang数组的长度在定义后不可更改,并且在声明时可以是一个常量或常量 ...

  3. golang中不定参数与数组切片的区别

    package main import "fmt" func main() { myfunc1(, , , ) //传递不定数量的参数 myfunc2([], , , }) //传 ...

  4. Go语言学习之4 递归&闭包&数组切片&map&锁

    主要内容: 1. 内置函数.递归函数.闭包2. 数组与切片3. map数据结构4. package介绍 5. 排序相关 1. 内置函数.递归函数.闭包 1)内置函数 (1). close:主要用来关闭 ...

  5. 窥探Swift之数组安全索引与数组切片

    今天是元宵节,祝大家元宵节快乐!在Swift中的数组和字典中下标是非常常见的,数组可以通过索引下标进行元素的查询,字典可以通过键下标来获取相应的值.在使用数组时,一个常见的致命错误就是数组越界.如果在 ...

  6. go语言 类型:数组切片

    初看起来,数组切片就像一个指向数组的指针,实际上它拥有自己的数据结构,而不仅仅是个指针.数组切片的数据结构可以抽象为以下3个变量: 1.一个指向原生数组的指针: 2.数组切片中的元素个数: 3.数组切 ...

  7. go语言中的数组切片:特立独行的可变数组

    go语言中的数组切片:特立独行的可变数组 初看go语言中的slice,觉得是可变数组的一种很不错的实现,直接在语言语法的层面支持,操作方面比起java中的ArrayList方便了许多.但是在使用了一段 ...

  8. GO中的数组切片

    GO中的数组切片可以看做是功能更强大的数组,在append数据时,可以自动调整内存大小以适应数据实际大小,有些类似于C#中的List<T>. GO 中数组切片的“容量”与实际储存的大小可以 ...

  9. go递归函数如何传递数组切片slice

    数组切片slice这个东西看起来很美好,真正用起来会发现有诸多的不爽. 第一,数组.数组切片混淆不清,使用方式完全一样,有时候一些特性又完全不一样,搞不清原理很容易误使用. 第二,数组切片的appen ...

随机推荐

  1. idea教程--Maven 骨架介绍

    简单的说,Archetype是Maven工程的模板工具包.一个Archetype定义了要做的相同类型事情的初始样式或模型.这个名称给我们提供来了一个一致的生成Maven工程的方式.Archetype会 ...

  2. selenium+python自动化103-一闪而过的dialog如何定位

    前言 web页面操作的时候经常会遇到一闪而过的 dialog 消息,这些提示语一般只出现了几秒,过后元素节点就会在DOM中消失了. 本篇讲解下用chrome 浏览器如何定位一闪而过的 dialog 消 ...

  3. omnet++:官方文档翻译总结(三)

    翻译总结自:Turning it Into a Real Network - OMNeT++ Technical Articles 接官方文档翻译总结(二),本节主要是真实网络的搭建 Part 4 - ...

  4. linux多进/线程编程(3)——wait、waitpid函数和孤儿、僵尸进程

    当使用fork创建多个进程后,需要解决子进程回收的问题.wait和waitpid函数就是做这个工作的. 假设子进程没有合理的回收,可能会带来两个问题: 1.孤儿进程(父进程挂了,子进程活着),孤儿进程 ...

  5. 惨,给Go提的代码被批麻了

    hello大家好,我是小楼. 不知道大家还记不记得我上次找到了一个Go的Benchmark执行会超时的Bug?就是这篇文章<我好像发现了一个Go的Bug?>. 之后我就向Go提交了一个PR ...

  6. JZ-008-跳台阶

    跳台阶 题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果) 题目链接: 跳台阶 代码 public class Jz08 { ...

  7. 震撼的Linux全景图:业界成熟的内核架构长什么样?

    1)Linux怎么来的? Linus 为了方便访问大学服务器中的资源 ,在自己的机器上写了一个文件系统和硬盘驱动,这样就可以把自己需要的资源下载到自己的机器中.随后linus把这款操作系统雏形开源,成 ...

  8. Python 细聊可以媲美 PS 的 PIL 图片处理库

    1 . 前言 PIL 是 Python Image Library 的简称. PIL 库中提供了诸多用来处理图片的模块,可以对图片做类似于 PS(Photoshop) 的编辑.比如:改变图像大小.旋转 ...

  9. 微信小程序获取当前的时间戳

    js文件中进行计算var timestamp = Date.parse(new Date()); timestamp = timestamp / 1000; console.log(timestamp ...

  10. 微信小程序发布列表页面处理

    wxml: <!--pages/good_index/good_index.wxml--> <view class='list'> <block wx:for='{{in ...