【Go 基础篇】Go语言中的数组:初识与应用

news2024/11/16 0:03:36

在这里插入图片描述

Go语言以其简洁、高效和强大的特性在编程界广受欢迎。数组作为一种基本的数据结构,在各种应用场景中扮演着重要角色。本文将引入Go语言中的数组,介绍其特点、创建、初始化以及基本应用,为你打开数组的大门。

前言

数组是一种固定大小的数据结构,用于存储一系列相同类型的元素。与切片(Slice)不同,数组的大小在创建时就已经确定,无法进行动态调整。数组在编程中广泛应用,从简单的数据存储到复杂的算法和数据处理,都有其身影。

数组的基本特点

固定大小

数组在定义时需要指定固定的大小,这一特点使得数组在存储时占据连续的内存空间,从而能够快速访问元素。

相同数据类型

数组中的元素必须是相同的数据类型,这有助于保持内存布局的一致性,使得元素的存储更加紧凑。

零值初始化

如果在创建数组时未显式指定元素的初始值,那么数组的元素将会被自动初始化为对应类型的零值。例如,整数类型的数组元素会被初始化为0,字符串类型的数组元素会被初始化为空字符串。

数组的创建与初始化

在Go语言中,可以通过以下方式创建和初始化数组。

方式一:指定大小并初始化

package main

import "fmt"

func main() {
    var numbers [5]int   // 声明一个长度为5的int类型数组
    numbers[0] = 10      // 为第一个元素赋值
    numbers[1] = 20      // 为第二个元素赋值
    // ...
    fmt.Println(numbers) // 输出数组
}

方式二:使用初始化列表

package main

import "fmt"

func main() {
    numbers := [5]int{10, 20, 30, 40, 50} // 使用初始化列表初始化数组
    fmt.Println(numbers)                // 输出数组
}

方式三:自动推断数组大小

package main

import "fmt"

func main() {
    numbers := [...]int{10, 20, 30, 40, 50} // 自动推断数组大小
    fmt.Println(numbers)                   // 输出数组
}

数组的访问与遍历

通过索引访问元素

通过数组的索引可以访问到对应位置的元素。索引从0开始,以数组长度减1结束。

package main

import "fmt"

func main() {
    numbers := [5]int{10, 20, 30, 40, 50}
    fmt.Println("第一个元素:", numbers[0])   // 输出第一个元素
    fmt.Println("第三个元素:", numbers[2])   // 输出第三个元素
    fmt.Println("最后一个元素:", numbers[4]) // 输出最后一个元素
}

通过for循环遍历数组

通过for循环可以遍历数组中的所有元素。

package main

import "fmt"

func main() {
    numbers := [5]int{10, 20, 30, 40, 50}
    for i := 0; i < len(numbers); i++ {
        fmt.Println(numbers[i])
    }
}

使用range遍历数组

使用range关键字可以更方便地遍历数组。

package main

import "fmt"

func main() {
    numbers := [5]int{10, 20, 30, 40, 50}
    for _, value := range numbers {
        fmt.Println(value)
    }
}

数组的应用

作为函数参数

数组可以作为函数的参数传递。需要注意的是,数组在参数传递时会被复制一份,所以函数内部对数组的修改不会影响到原始数组。

package main

import "fmt"

func modifyArray(arr [5]int) {
    arr[0] = 100
}

func main() {
    numbers := [5]int{10, 20, 30, 40, 50}
    modifyArray(numbers)
    fmt.Println(numbers) // 输出 [10 20 30 40 50]
}

多维数组

Go语言支持多维数组,可以通过嵌套的数组创建多维数组。

package main

import "fmt"

func main() {
    var matrix [3][3]int
    for i := 0; i < 3; i++ {
        for j := 0; j < 3; j++ {
            matrix[i][j] = i + j
        }
    }
    fmt.Println(matrix)
}

数组与切片的比较

数组和切片是Go语言中的两种不同的数据结构,它们有着不同的特点和用途。

数组

  • 大小固定,创建时需要指定大小。
  • 传递给函数时会复制整个数组。
  • 可以作为多维数组的基础。

切片

  • 动态大小,支持动态扩展和缩减。
  • 传递给函数时传递的是底层数据的引用。
  • 支持各种操作,如追加、删除、切割等。

总结

数组作为一种基本的数据结构,在Go语言中扮演着重要的角色。通过掌握数组的创建、初始化、访问和遍历,你可以在开发中更加灵活地处理数据集合。尽管数组的大小固定,但其在一些场景中仍然非常有用,如存储已知大小的数据集合或构建多维数组。当你需要更灵活地管理数据大小和操作时,切片是更好的选择。

在实际开发中,你可能会经常使用数组来存储和处理数据。了解数组的基本特点、创建方式以及遍历方式,可以帮助你更好地理解和应用这一重要的数据结构。当然,还要注意数组的固定大小和数据类型的限制,以及在函数传参时数组复制的特点。

同时,数组与切片的比较也是非常重要的。切片作为更灵活的数据结构,可以用来处理动态大小的数据集合。在某些情况下,你可能会在数组和切片之间权衡选择,根据实际需求来决定使用哪种数据结构。

通过实践和实际应用,你将能够更好地理解和掌握数组的使用方法,从而在日常开发中更加自如地处理数据集合。无论是处理小规模的数据还是构建复杂的算法,数组都是你编程工具箱中不可或缺的一部分。通过不断学习和实践,你将能够在Go语言中充分发挥数组的优势,为你的程序增添更多的可能性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/934285.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【LeetCode75】第三十八题 二叉树的最近公共祖先

目录 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 代码&#xff1a; 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 给我们一棵二叉树&#xff0c;然后给我们pq两个节点&#xff0c;让我们找出二叉树中它们俩的最近的公共祖先。 那么什么样的节点是它们俩…

Linux常用命令——df命令

在线Linux命令查询工具 df 显示磁盘的相关信息 补充说明 df命令用于显示磁盘分区上的可使用的磁盘空间。默认显示单位为KB。可以利用该命令来获取硬盘被占用了多少空间&#xff0c;目前还剩下多少空间等信息。 语法 df(选项)(参数)选项 -a或--all&#xff1a;包含全部的…

C#,《小白学程序》第六课:队列(Queue)的应用————《实时叫号系统》

1 文本格式 /// <summary> /// 下面定义一个新的队列&#xff0c;用于演示《实时叫号系统》 /// </summary> Queue<Classmate> q2 new Queue<Classmate>(); /// <summary> /// 《小白学程序》第六课&#xff1a;队列&#xff08;Queue&#xf…

用Python画出极坐标的基向量

文章目录 极坐标基向量的推导可视化 极坐标基向量的推导 极坐标其实很神奇&#xff0c;一方面&#xff0c;它描述的是平直时空&#xff0c;另一方面&#xff0c;任意两点间的坐标差为 d r , d θ \text dr, \text d\theta dr,dθ时&#xff0c;两点间的距离却是不固定的。极坐…

wxpython + cef 是优秀的 WebView 组件

CEF 即 (Chromium Embedded Framework)&#xff1b;cef 是优秀的 WebView 组件。 pip install wxpython4.2 wxPython-4.2.0-cp37-cp37m-win_amd64.whl (18.0 MB) Successfully installed wxpython-4.2.0 pip install cefpython3 cefpython3-66.1-py2.py3-none-win_amd64.whl …

springboot+vue基于 JAVA 的医院门诊信息管理系统的设计与实现 f1ls0

系统根据现有的管理模块进行开发和扩展&#xff0c;采用面向对象的开发的思想和结构化的开发方法对医院门诊信息的现状进行系统调查。采用结构化的分析设计&#xff0c;该方法要求结合一定的图表&#xff0c;在模块化的基础上进行系统的开发工作。在设计中采用“自下而上”的思…

多线程和并发(1)—等待/通知模型

一、进程通信和进程同步 1.进程通信的方法 同一台计算机的进程通信称为IPC&#xff08;Inter-process communication&#xff09;&#xff0c;不同计 算机之间的进程通信被称为 RPC(Romote process communication)&#xff0c;需要通过网络&#xff0c;并遵守共同的协议。**进…

每日三题 1448统计二叉树中好节点的个数 100相同的树 101对称二叉树

1448 题目 给你一棵根为 root 的二叉树&#xff0c;请你返回二叉树中好节点的数目。 「好节点」X 定义为&#xff1a;从根到该节点 X 所经过的节点中&#xff0c;没有任何节点的值大于 X 的值。 示例 1&#xff1a; 输入&#xff1a;root [3,1,4,3,null,1,5] 输出&#xff…

2021-05-25 rs485保护电路

今天给大家分享485接口的EMC设计&#xff0c;希望对电路设计&#xff0c;及相关软件开发的人员有帮助。 一、原理图 1. RS485接口6KV防雷电路设计方案 &#xff08;RS485接口防雷电路&#xff09; 接口电路设计概述&#xff1a; RS485用于设备与计算机或其它设备之间通讯&…

攻防世界-Web_php_unserialize

原题 解题思路 注释说了flag存在f14g.php中&#xff0c;但是在wakeup函数中&#xff0c;会把传入的文件名变成index.php。看wp知道&#xff0c;如果被反序列话的字符串其中对应的对象的属性个数发生变化时&#xff0c;会导致反序列化失败而同时使得__wakeup 失效&#xff08;CV…

Qt/C++编写视频监控系统80-远程回放视频流

一、前言 远程回放NVR或者服务器上的视频文件&#xff0c;一般有三种方式&#xff0c;第一种是调用厂家的SDK&#xff0c;这个功能最全&#xff0c;但是缺点明显就是每个厂家的设备都有自己的SDK&#xff0c;只兼容自家的设备&#xff0c;如果你的软件需要接入多个厂家的&…

STM32新手入门-什么是寄存器

✅作者简介&#xff1a;嵌入式入坑者&#xff0c;与大家一起加油&#xff0c;希望文章能够帮助各位&#xff01;&#xff01;&#xff01;&#xff01; &#x1f4c3;个人主页&#xff1a;rivencode的个人主页 &#x1f525;系列专栏&#xff1a;玩转STM32 &#x1f4ac;保持学…

小程序外包开发上线的问题解决

在小程序上线过程中&#xff0c;可能会遇到各种问题。解决问题的关键是保持沟通、持续改进和测试。小程序的上线后维护同样重要&#xff0c;要不断关注用户反馈和市场变化&#xff0c;及时做出调整和优化。以下是一些常见问题及其可能的解决方案&#xff0c;希望对大家有所帮助…

FL水果21.1全新版本下载FL Studio新增功能讲解

FL Studio就是国人众所熟知的水果编曲软件&#xff0c;圈内用户习惯叫它“水果”。它是一个全能音乐制作环境和数字音频工作站&#xff08;DAW&#xff09;。FL Studio可以进行编曲、剪辑、录音、混音&#xff0c;让你的电脑变成全功能录音室&#xff0c;帮助你制作出属于自己的…

各地区结婚、离婚、再婚等数据(1990-2021年)

涵盖了1990年至2021年各地区的结婚、离婚以及再婚情况。通过对此数据进行分析&#xff0c;我们可以了解婚姻趋势的演变和地区之间的差异。数据反映了人们的婚姻决策、家庭变化以及社会动态&#xff0c;为研究家庭结构和社会变迁提供了有价值的信息。 一、数据介绍 数据名称&a…

基于树莓派的智能小车 python

摘要 playWithRaspberryPi 实战笔记 raspberrypi_cookbook 树莓派python代码本 树莓派(Raspberry Pi)是一种小型的单片机计算机&#xff1b; 它可以通过其引脚和接口与外部硬件通信。 Pi(树莓派的简称)展示了我们可以如何分解大型的Realbox机器&#xff0c; 使Dynamicland成…

如何在windows下使用masm和link对汇编文件进行编译

前言 32位系统带有debug程序&#xff0c;可以进行汇编语言和exe的调试。但真正的汇编编程是“编辑汇编程序文件(.asm)->编译生成obj文件->链接生成exe文件”。下面&#xff0c;我就来说一下如何在windows下使用masm调试&#xff0c;使用link链接。 1、下载相应软件 下载…

Linux系统编程系列之进程间通信(IPC)-管道

一、什么是管道 在Linux系统下&#xff0c;一切皆文件&#xff0c;所以管道就是一个文件&#xff0c;用来实现进程间通信的一种方式。分析小技巧&#xff1a;对于一些陌生的概念&#xff0c;都把它当成是文件&#xff0c;然后操作的时候&#xff0c;就是三部曲。文件打开&#…

香港服务器是什么?

香港服务器是指位于香港地区的云服务器或物理服务器。香港作为一个重要的国际金融和商业中心&#xff0c;具有良好的地理位置和先进的网络基础设施。香港服务器提供稳定的网络连接和高性能&#xff0c;可用于托管网站、应用程序和数据存储等各种互联网服务。 香港服务器具有以…

精准测试——持续测试

前面已经介绍了黑盒测试和白盒测试。从前面的介绍中可以知道&#xff0c;黑盒测试是一种面向业务流程的测试&#xff0c;针对需求设计测试用例&#xff0c;在运行的系统上执行测试用例&#xff0c;完成测试。 整个测试过程中测试工程师对于测试代码是如何运行的一无所知&#…