当前位置: 首页 > article >正文

15分钟学 Go 第 13 天:数组

第13天:数组

学习目标

在今天的课程中,我们将全面了解Go语言中的数组概念。通过学习数组的定义、使用、操作及最佳实践,帮助你在编程中有效管理和使用数据。

一、数组的概念

数组是Go语言中一种基本的数据结构,用于存储固定长度的同类型元素集合。数组的主要特点包括:

  • 固定大小:数组在定义时必须指定大小,且无法在运行时更改。
  • 元素类型一致:所有元素均为相同类型。

二、数组的定义与语法

在Go中,可以通过以下方式定义数组:

var arrayName [size]Type
  • arrayName:数组名称。
  • size:数组大小,即元素个数。
  • Type:数组元素的类型。
2.1 示例:定义数组
var numbers [5]int // 定义一个包含5个整数的数组

三、数组的初始化

数组在定义时可以同时进行初始化,使用花括号 {} 包围初始化元素。例如:

var fruits [3]string = [3]string{"Apple", "Banana", "Cherry"}

也可以省略长度,根据初始化元素的个数自动推断:

colors := [...]string{"Red", "Green", "Blue"} // 自动推断为长度3

四、访问数组元素

可以通过索引访问数组中的元素,索引从0开始。例如:

fmt.Println(fruits[1]) // 输出 "Banana"

五、数组的长度

可以通过内置的 len() 函数获取数组的长度:

fmt.Println(len(fruits)) // 输出 3

六、数组的遍历

遍历数组可以使用 for 循环:

6.1 使用传统的 for 循环
for i := 0; i < len(fruits); i++ {
    fmt.Println(fruits[i])
}
6.2 使用 range 循环

Go提供了更简洁的遍历方式:

for index, value := range fruits {
    fmt.Printf("Index: %d, Value: %s\n", index, value)
}

七、数组的例子代码

下面是一个完整的数组示例程序,它涉及创建数组、初始化、访问和遍历。

package main

import "fmt"

func main() {
    // 定义并初始化数组
    var fruits [3]string = [3]string{"Apple", "Banana", "Cherry"}
    
    // 访问元素
    fmt.Println("第一个水果:", fruits[0]) // 输出 "Apple"
    
    // 修改数组元素
    fruits[1] = "Orange"
    fmt.Println("修改后的第二个水果:", fruits[1]) // 输出 "Orange"
    
    // 数组长度
    fmt.Println("水果数量:", len(fruits)) // 输出 3
    
    // 遍历数组
    fmt.Println("水果清单:")
    for i := 0; i < len(fruits); i++ {
        fmt.Printf("水果[%d]: %s\n", i, fruits[i])
    }

    // 使用range遍历数组
    fmt.Println("使用range遍历水果:")
    for index, value := range fruits {
        fmt.Printf("Index: %d, Value: %s\n", index, value)
    }
}
运行流程图
+--------------------+
|       main         |
+--------------------+
| Define fruits      |
| fruits := ["Apple", "Banana", "Cherry"] |
| Print fruits[0]    |
| Update fruits[1]   |
| Print len(fruits)  |
| For loop to iterate |
| Print fruits       |
| For range loop to   |
| iterate fruits      |
+--------------------+

八、数组的切片(Slices)

Go语言中使用数组的同时,也引入了切片的概念,切片是对数组的一个抽象,提供了动态大小的能力。

8.1 切片的定义与初始化

切片可以通过以下方式创建:

var sliceName []Type // 声明切片

或使用 make() 函数创建切片:

s := make([]int, 5) // 创建一个长度为5的切片

切片可以从数组创建:

subSlice := fruits[1:3] // 获取数组的切片

九、数组传参

在Go语言中,数组作为函数参数时,实际上是以值传递的。对数组的修改不会影响原始数组。

func modifyArray(arr [3]string) {
    arr[0] = "Pineapple"
}

func main() {
    fruits := [3]string{"Apple", "Banana", "Cherry"}
    modifyArray(fruits)
    fmt.Println("原数组:", fruits[0]) // 输出 "Apple"
}
9.1 切片传参示例

切片作为参数传递时是引用传递,修改切片会影响原始切片:

func modifySlice(s []string) {
    s[0] = "Pineapple"
}

func main() {
    fruits := []string{"Apple", "Banana", "Cherry"}
    modifySlice(fruits)
    fmt.Println("原切片:", fruits[0]) // 输出 "Pineapple"
}

十、数组的最佳实践

  • 避免使用固定数组:在大多数情况下,使用切片会更灵活,方便维护。
  • 明确元素类型:确保数组中的元素类型清晰,以减少隐性错误。
  • 简化通过切片操作:使用切片时可避免长度限制,且可以动态调整。

十一、常见问题解答

Q1: 为什么要用数组而不是切片?

A: 数组的大小固定,适合需要使用特定数量元素且不希望改变数组大小的场景。切片更灵活,适合大多数动态应用场景。

Q2: Go语言中数组的默认值是什么?

A: 数组的默认值是该类型的零值。例如,int 类型的数组默认值为 0string 类型的默认值为 ""

十二、总结

在今天的课程中,我们学习了Go语言中的数组,包括数组的定义、初始化、访问、遍历及使用场景等。通过丰富的示例代码和流程图,加深了对数组的理解。能够使用数组和切片将使你在处理数据时更加高效和灵活。


怎么样今天的内容还满意吗?再次感谢观众老爷的观看,关注GZH:凡人的AI工具箱,回复666,送您价值199的AI大礼包。最后,祝您早日实现财务自由,还请给个赞,谢谢!


http://www.kler.cn/news/360002.html

相关文章:

  • springboot 读取配置的方式
  • 基于Lambda架构的大数据处理详解
  • 洛谷刷题 P1008 [NOIP1998 普及组] 三连击
  • 深入剖析CAS:无锁并发编程的核心机制与实际应用
  • MySQL 的系统函数
  • 快速了解Python流程控制语句基本使用
  • 【C++】在Windows中使用Boost库——实现TCP、UDP通信
  • Moectf-week1-wp
  • ENSP环回路由的配置
  • 深度学习基础—神经风格迁移
  • PCL 基于中值距离的点云对应关系(永久免费版)
  • 我常用的两个单例模式写法 (继承Mono和不继承Mono的)
  • 通过SSH远端免密登录执行脚本,修改最新5分钟生成文件权限
  • 离散数学 第二讲 特殊集合和集合间关系 笔记 [电子科大]王丽杰
  • uniapp 常用的地区行业各种多选多选,支持回显,复制粘贴可使用
  • 使用HIP和OpenMP卸载的Jacobi求解器
  • Netty笔记
  • 【论文学习与撰写】,论文word文档中出现乱码的情况,文档中显示的乱码,都是英文字母之类的,但打印预览是正常的
  • Flutter 11 Android原生项目集成Flutter Module
  • 判断索引对象中所有元素是否都为真值pandas.Index.all()