数组

数组是指一系列同一类型数据的集合。数组中包含的每个数据被称为数组元素(element),一个数组包含的元素个数被称为数组的长度。

1. 声明方法

[32]byte //长度为32的数组

[2*N] struct {x, y int32} //复杂类型数组

[100]*float64 //指针数组

[3][5]int //二维数组

[2][2][2]float64 //等同于[2]([2]([2]float64))

数组的长度在声明时就已经确定,后面不能再次修改。可以使用len()函数来求数组的长度。

2. 元素访问

使用下标访问数组,同C语言一样,下标也是从0开始

for i := 0; i < len(array); i++ {

fmt.Println("Element", i, "of array is", array[i])

}

当然,我们也可以使用Go语言提供的range关键字来遍历数组。

for i, v := range array {

fmt.Println("Element", i, "of array is", v)

}

3.值类型

Go语言中,数组是值类型,作为参数传递时,都会产生一次复制动作。所以,在函数中不能

将数组作为参数传递,因为在函数中操作的只不过是数组的副本而已。

package main

import "fmt"

func modify(array [5]int) {

array[0] = 10

fmt.Println("In Modify, array values:", array)

}

func main() {

array := [5]int{1, 2, 3, 4, 5}

modify(array)

fmt.Println("In Main, array values:", array)

}

它的输出为:

In Modify, array values: [10 2 3 4 5]

In Main, array values: [1 2 3 4 5]

4.数组切片

在前面我们提到,数组有两个特性

数组长度在定义后无法改变

数组是值类型,在参数传递时会产生副本。

这两大特性使得数组无法适应开发者的真实需求。所以我们使用数组切片(Slice)来弥补

数组的不足。

从底层的角度看,数组切片仍然使用数组来管理元素。基于数组,数组切片添加了一系列管理功能。可以随时动态扩充存放空间。并且在传参时不会产生复制。

4.1 基于数组创建数组切片

var marr [5]int = [5]int{1, 2, 3, 4, 5}

var mSlice []int = marr[:3]

Golang支持使用Array[first:last]的方式来基于数组生成一个数组切片。

4.2 直接创建数组切片

mySlice1 := make([]int, 5) //创建一个初始元素为5的数组切片,元素初始值为0

mySlice2 := make([]int, 5, 10) //创建一个初始元素为5的数组切片,元素初始值为0,并且预留10个元素空间。

mySlice3 := []int{1, 2, 3, 4, 5} //创建,并初始化一个数组切片

4.3 遍历

同数组一样,我们可以使用下标或者range的方式遍历数组切片

4.4 动态增减元素

Go语言内置len()和cap()方法。len()函数返回数组切片当前存储的元素个数,cap()函数返回数组切片分配的空间大小。例如:

mySlice := make([]int, 5, 10)

len(mySlice) //5

cap(mySlice) //10

4.4.1 新增元素

如果想往上面的mySlice数组切片添加元素,可以使用append()函数。

mySlice = append(mySlice, 1, 2, 3) //mySlice末尾添加三个元素

mySlice2 := []int{8, 9, 10}

mySlice = append(mySlice, mySlice2...) //将mySlice2数组切片添加到mySlice末尾。

5. 内容复制

Go语言另一个内置函数copy(),用于将内容从一个数组切片复制到另一个数组切片。如果两个数组切片不一样大。如果加入两数组切片不一样大,就会按较小的那个数组切片的元素个数进行复制。

slice1 := []int{1, 2, 3, 4, 5}

slice2 := []int{5, 4, 3}

copy(slice2, slice1) //只会复制slice1前三个元素到slice2中

copy(slice1, slice2) //只会复制slice2的3个元素到slice1的前三个位置。

golang 包含 数组_Golang数组类型相关推荐

  1. golang string数组转int数组_golang数组详解

    数组(array)就是由若干相同类型的元素组成的序列.先看一个示例: var ipv4[4]uint8=[4]uint8{192,168,0,1} 在这条赋值语句中,我为刚声明的变量ipv4赋了值.在 ...

  2. golang 包含 数组_golang 数组

    数组是Go语言编程中最常用的数据结构之一.顾名思义,数组就是指一系列同一类型数据的集合.数组中包含的每个数据被称为数组元素(element),一个数组包含的元素个数被称为数组的长度. 在Go语言中数组 ...

  3. golang 包含文本_Golang教程之Web篇(七)

    首先,大家一起思考一个问题:何为Web编程? 严格来说,这只是一个叫法,并没有学术上的定义,但是一般大家都说到web都是指浏览器相关,所以大家一般说的web开发要么是PC Web要么就是手机Web,不 ...

  4. 切片 里面包含interface_Golang的数组和切片

    什么是数组 首先数组是一种数据结构,而Go语言也提供了数组类型的数据结构,数组是具有相同唯一类型的一组已编号且长度固定的数据项序列,这种类型可以是任意的原始类型例如整形.字符串或者自定义类型等. 数组 ...

  5. php简单网站源码包含数组_PHP 数组

    PHP 数组 数组能够在单个变量中存储多个值: 实例 $cars=array("Volvo","BMW","Toyota"); echo & ...

  6. java数组子类型_[改善Java代码]数组的真实类型必须是泛型类型的子类型

    List接口的toArray方法可以把一个结合转化为数组,但是使用不方便,toArray()方法返回的是一个Object数组,所以需要自行转变. toArray(T[] a)虽然返回的是T类型的数组, ...

  7. floatmap 二维数组_Golang学习笔记(四):array、slice、map

    一.Array 在Go语言中,数组是一个值类型(value type) 所有的值类型变量在赋值和作为参数传递时都将产生一个复制动作 如果作为函数的参数类型,则在函数调用时参数发生数据复制,在函数体中无 ...

  8. 小白学C++ L11 数组和字符数组及string 类型

    数组 C++使用数组来实现一次性声明很多变量的功能,具有以下特性: 创建后的数组大小固定 同一数组中的元素类型相同 是一系列数据顺序集合 数组如何声明 在C++中声明数组时,需要指定元素类型.数组名称 ...

  9. 将字符串数组转换为字符串类型

    大家好,我是三叔,很高兴这期又和大家见面了,一个奋斗在互联网的打工人. 当你在Java编程中需要将一个字符数组转换为字符串类型时,你可以使用Java内置的String类提供的方法.在本文中,笔者将介绍 ...

最新文章

  1. java正则表达式练习题目
  2. 学校通知,本学期不用返校了
  3. Guava之FluentIterable使用示例
  4. 与客家土楼的约会(增城-河源)
  5. 另一个ExcelHelper
  6. 电力现货市场现货需求_现货与情绪:现货铜市场中的自然语言处理与情绪评分
  7. 地质灾害防治条例释义的摘要
  8. sqlserver无法启动端口冲突解决方法
  9. cf723d Lakes in Berland
  10. 如何避免程序员的大脑超载?
  11. 字符编码集与ASCII码表
  12. java8 update 91 有什么用_为什么java8还在被大量使用?
  13. 北辰创业笔记:百度引流推广有用吗?百度引流最有效的方法
  14. 水溶性量子点CdSe/ZnS
  15. 亚洲杯在即,中国男足志在必得。
  16. Python学习笔记——数据分析之工作环境准备及数据分析建模理论基础
  17. 根据两个经纬度点调用百度地图应用查询路线 适用android或者ios中及网页浏览(手机网页同样适用)
  18. 推荐5款热门脑图软件!
  19. Oracle与SQL *PLUS简介
  20. 即将搭载人工智能芯片的华为Mate10,究竟会为业界带来什么?

热门文章

  1. electron知识点
  2. 方法的重载(overload)和重写(override)的区别
  3. [签名算法]DSA 算法
  4. 用类来实现输入输出时间,定义多个类对象分别输入输出各对象的时间(时:分:秒),使用函数,数据成员不再由键盘输入,而在调用函数时由实参给出,并在函数中使用默认参数
  5. java 添加注解_你知道Java中的package-info的作用吗?
  6. linux 安装qq,如何安装linux版本QQ?
  7. mq幂等mysql_膜拜!看完这篇你还不懂RocketMQ算我输
  8. 联想服务器系统安装bios设置,Windows 8操作系统如何通过Legacy BIOS与UEFI两种模式安装...
  9. python中表达式4**0.5的值为_Python内置函数__用来返回序列中的最小元素
  10. python 可视化监控平台_python可视化篇之流式数据监控的实现