• Go语言中的数组、切片和映射解析


    数组

    数组存放的是固定长度、相同类型的数据,而且这些存放的元素是连续的。

    数组的声明

    例如声明一个整形数组:

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

    在类型名前加 [] 中括号,并设置好长度,大括号中的元素用于初始化数组,需要注意的是数组的长度不同,即属于不同的类型。

    如果所有元素都被初始化的数组,声明时可以省略数组长度,例如上述的数组可以不写长度:

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

    数组循环

    使用传统for进行数组遍历:

    for i := 0; i < 3; i++ {
    		fmt.Println(array[i])
    	}
    
    • 1
    • 2
    • 3

    在这里插入图片描述
    还有就是使用go中提供的for range循环,代码如下:

    for i, v := range array {
    		fmt.Println(i, v)
    	}
    
    • 1
    • 2
    • 3

    range表达式返回的结果分别为索引与数值,如果返回值用不到可使用下划线丢弃掉。

    切片

    切片是基于数组实现的,它的底层就是一个数组。对数组任意分隔,就可以得到一个切片。切片是一个具备三个字段的数据结构,分别是指向数组的指针 data,长度 len 和容量 cap。

    切片声明

    使用 make 函数进行切片声明,声明一个元素类型为 int 的切片,长度是 4,make 函数还可以传入一个容量参数:

    	slice := make([]int, 3)
    	fmt.Println(slice)
    
    • 1
    • 2

    我们进行打印默认是0。
    在这里插入图片描述
    传入容量:

    slice := make([]int, 3, 5)
    
    • 1

    当然切片的容量不能比切片的长度小。
    容量就是申请的内存空间,而长度是已经使用的内存空间,我们可以通过 append 函数往切片中追加元素,来使用空闲内存。

    slice = append(slice, 1, 2)
    	fmt.Println(slice)
    
    • 1
    • 2

    在这里插入图片描述
    通过结果可知直接追加到空闲内存上了。

    切片元素循环

    切片的循环和数组一模一样,常用的也是 for range 方式。

    for i,v  := range slice {
    		fmt.Println(i, v)
    	}
    
    • 1
    • 2
    • 3

    在这里插入图片描述
    输出的分别是切片的索引与数值。

    映射

    在 Go 语言中,map 是一个无序的 K-V 键值对集合,结构为 map[K]V。其中 K 对应 Key,V 对应 Value。map 中所有的 Key 必须具有相同的类型,Value 也同样,但 Key 和 Value 的类型可以不同。

    Map的声明及初始化

    可通过内置的 make 函数进行map的创建,并进行赋值,代码如下:

    	map6 := make(map[string]int)
    	map6["a"] = 1   
    
    • 1
    • 2

    也可使用字面量的方式进行map的创建,并进行赋值操作,代码如下:

    	map7 := map[string]int{}
    	map7["b"] = 2
    
    • 1
    • 2

    map 的 [] 操作符可以返回两个值,第一个是value,第二个是key,如果存在则返回true。示例如下:

    	map7 := map[string]int{}
    	map7["b"] = 2
    	v, k := map7["b"]
    	fmt.Println(v, k)
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    Map的遍历

    在 Go 语言中,map 的遍历使用 for range 循环。
    对于 map,for range 同样返回两个值,一个是key,一个是value。示例如下:

    map6 := make(map[string]int)
    	map6["a"] = 1
    	map6["b"] = 2
    	map6["c"] = 3
    	for k, v := range map6 {
    		fmt.Println(k, v)
    	}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    在这里插入图片描述
    在这里插入图片描述
    通过两张结果图可以看出map 的遍历是无序的,也就是说你每次遍历,键值对的顺序可能会不一样。

    map的大小可以使用内置的 len 函数进行获取。

    println(len(map6))
    
    • 1

    在这里插入图片描述

    总结:
    1.数组是具有固定长度和相同类型的数据集合。声明数组时需要指定数组的长度和元素类型,也可以省略长度以创建一个长度可变的数组。
    2.切片是对数组的一个引用,它包含指向数组的指针、长度和容量信息。可以使用make函数创建切片,并使用append函数向切片追加元素。
    3.映射是一个无序的键值对集合,键和值可以是不同的类型。可以使用内置的make函数或字面量方式创建映射,并使用for range循环遍历映射。
    4.在Go语言中,可以使用传统的for循环或for range循环遍历数组和切片。for range循环返回键值对,可以用于遍历映射。
    5.可以通过len函数获取映射的大小。

    想了解更多go知识可以通过官网文档来进行学习。

  • 相关阅读:
    使用python获取浏览器收藏夹和历史浏览记录,然后可以...
    科创人·优艾智合创始人张朝辉:死磕细分行业Know-How,中国制造将引领全球移动机器人市场
    前端实现页面文本复制/代码复制/mardown复制的几种方式
    目的和目标的差异|丰田自动工程完结的目的、目标、应用化的意义和明确
    【git】GitHub仓库没有 Contribution activity
    一文带你读懂什么是云主机
    说说相机标定?
    国内首个智能体生态大会!2024百度万象大会定档5月30日
    SpringBoot + 一个注解,轻松实现 Redis 分布式锁
    Linux:rwx操作对目录的操作效果+rwx的最小权限问题
  • 原文地址:https://blog.csdn.net/st200112266/article/details/132700167