专栏首页aoho求索Go 语言入门系列:数组的使用

Go 语言入门系列:数组的使用

前文回顾

前面的文章主要介绍了 Go 基于语法中的分支和循环控制结构。其中涉及到的 If 、Switch 和 for 等关键字,是我们日常编码所常用的。当我们在程序中操作大量同类型变量时,为了方便数据的存储和操作,我们需要借助容器的力量。本文我们将介绍 Go 容器:数组。

Go 中常用的容器

Golang 中以标准库的方式提供了常用的容器实现,基本能够满足我们日常开发的需要。我们来具体学习下 Go 数组的使用。

数组

Go 语言提供了数组类型的数据结构。

数组是具有相同唯一类型的一组已编号且长度固定的数据项序列,这种类型可以是任意的原始类型例如整型、字符串或者自定义类型。

相对于声明 number0, number1, ..., number99 的变量,使用数组形式 numbers[0], numbers[1] ..., numbers[99] 更加方便且易于扩展。

数组元素可以通过索引(位置)来读取(或者修改),索引从 0 开始,第一个元素索引为 0,第二个索引为 1,以此类推。数组的声明样式如下所示:

var name [size]T

数组大小必须指定,可以是一个常量或者表达式,但必须在静态编译时就确定其大小,不能动态指定。T 表示数组成员的类型,可为任意类型。

对数组的初始化和使用与其他语言一般无二,可以在声明时使用初始化列表对数组进行初始化,也可以通过下标对数据成员进行访问和赋值,如下所示:

func main()  {
 var classMates1 [3]string
 classMates1[0] = "小明"
 classMates1[1] = "小红"
 classMates1[2] = "小李" // 通过下标为数组成员赋值
 fmt.Println(classMates1)
 fmt.Println("The No.1 student is " + classMates1[0]) // 通过下标访问数组成员

 classMates2  := [...]string{"小明", "小红", "小李"} // 使用初始化列表初始化列表
 fmt.Println(classMates2)

}

在使用初始化列表初始化数组时,需要注意 [] 内的数组大小需要和 {} 内的数组成员的数量一致,上述例子中我们使用 ... 让编译器为我们根据 {} 内成员的数量确定数组的大小。

除此之外,我们还可以使用指针操作数组,如下例子所示:

classMates3 := new([3]string)
classMates3[0] = "小明"
classMates3[1] = "小红"
classMates3[2] = "小李"
fmt.Println(*classMates3)

我们通过 new 函数申请了 [3]string 的内存空间,并返回了其对应的指针。需要注意的是,该指针无法支持偏移和运算,这是 Golang 对指针类型的限制。我们可以通过指针直接操作数组,与 C 语言中的指针功能无异。

小结

本文较为简单,主要介绍了 Go 语言中数组的基本使用。数组是一段存储固定类型固定长度的连续内存空间,它的大小在声明的时候就已经固定下来了。虽然数组的大小不可变化,数组的成员可以修改。

Go 语言中与数组类似的容器还有切片,对于切片的使用,很多人搞不清切片与数组的区别。我们下面一篇文章将会介绍切片的使用。

本文分享自微信公众号 - aoho求索(aohoBlog),作者:cangwu

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2021-07-01

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Go语言入门系列(四)之map的使用

    map是一种映射,可以将键(key)映射到值(value),格式为:map[keyType]valueType。

    二十二画程序员
  • Go语言入门系列(七)之如何使用Go的方法?

    如果你用过面向对象的语言,比如Java,那你肯定对类、对象、成员变量、方法等很熟悉。

    二十二画程序员
  • Go 语言入门系列:Go 语言:环境安装

    「最近将会更新 Go 语言入门的系列文章,非常基础。适合小白入门或者零基础的同学,已有相关 Go 基础的同学可以略过。」

    aoho求索
  • 【Go语言入门系列】Go语言工作目录介绍及命令工具的使用

    在【保姆级教程】手把手教你进行Go语言环境安装及相关VSCode配置一文中已经配置过工作空间GOPATH的环境变量了,并在工作空间中新建了三个目录src、pkg...

    二十二画程序员
  • Go 语言入门系列:原生数据类型

    前面一篇文章介绍了 Go 基本语法,变量的声明与初始化。本文将会具体介绍 Go 原生数据类型。Go 语言中具备丰富的数据类型,基本类型有整型、浮点数、布尔型、字...

    aoho求索
  • Go语言入门系列(六)之再探函数

    在Go语言入门系列(二)之基础语法总结这篇文章中已经介绍过了Go语言的函数的基本使用,包括声明、参数、返回值。本文再详细介绍一下函数的其他使用。

    二十二画程序员
  • Go 语言入门系列:切片的应用实践

    Golang 中以标准库的方式提供了常用的容器实现,基本能够满足我们日常开发的需要。我们来具体学习下 Go 数组的使用。

    aoho求索
  • Go 语言入门系列:指针的基本应用

    前面文章介绍了 Go 语言原生数据类型。Golang 中具备丰富的数据类型,基本类型有整型、浮点数、布尔型、字符串型等,除此之外,还有切片、结构体、指针、通道、...

    aoho求索
  • Go 语言入门系列:列表与字典

    前面的文章主要介绍了 Go 容器的数组和切片的基本概念以及使用。切片是 Go 中提供了一种灵活,功能强悍的内置类型("动态数组")。与数组相比切片的长度是不固定...

    aoho求索
  • Go 语言入门系列:第一个 Go 程序

    上一篇文章,我们介绍了 Go 语言的一些特性以及环境的安装。具体可以参见:https://juejin.cn/user/3491704659786455

    aoho求索
  • 【Go语言入门系列】(八)Go语言是不是面向对象语言?

    在【Go语言入门系列】(七)如何使用Go的方法?这一文中已经介绍了方法的概念,但这个方法实际上并不是面向对象中的方法。方法实际上是用户给其定义的类型的增加的新行...

    二十二画程序员
  • Go语言入门系列(五)之指针和结构体的使用

    我们写的代码都存储在外存(C盘、D盘)中,比如我存在了D:\Work\Program\go目录下。如果你想要运行你的代码,必须先把你的代码加载进内存中,然后交给...

    二十二画程序员
  • Go语言入门(三)数组和切片

    copy(dest,src) 拷贝之后,各自的地址不会发生改变,只是拷贝目的地的值发生了改变

    alexhuiwang
  • Go 语言入门系列:Go 语言中的常量别名与控制结构

    前面一篇文章主要介绍了 Go 语言中的指针基本概念与相关用法。Go 语言限制了指针类型的偏移和运算能力,使得指针类型具备了指针高效访问的特性,但又不会发生指针偏...

    aoho求索
  • Go语言入门——数组、切片和映射

    但是对于Go,思来想去,感觉真的从“HelloWorld”说起,压根撑不住一篇的篇幅,因为Go的HelloWorld太简单了。

    JackieZheng
  • Go语言系列(三)之数组和切片

    数组用于存储若干个相同类型的变量的集合。数组中每个变量称为数组的元素,每个元素都有一个数字编号——数组下标,该下标从0开始,用于区别各个元素。数组中可容纳的元素...

    二十二画程序员
  • Go 语言基础入门教程 —— 数据类型篇:数组及其使用

    数组是所有语言编程中最常用的数据结构之一,Go 语言也不例外,与 PHP、JavaScript 等弱类型动态语言不同,在 Go 语言中,数组是固定长度的、同一类...

    学院君
  • Go 语言网络编程系列(一)—— Socket 编程入门:Dial 函数及其使用

    回想下我们在 C 语言中编写网络程序时,以基于 TCP 协议的网络服务为例,客户端和服务端的实现流程通常是这样的:

    学院君
  • Go语言入门——数组、切片和映射(下)

      不管是数组、切片还是映射结构,都是一种集合类型,要从这些集合取出元素就要查找或者遍历。

    JackieZheng

扫码关注云+社区

领取腾讯云代金券