一、数组、切片(slice)和映射

前言,在本章中,将学习关于数组的相关知识

1 使用数组

数组的定义格式如下:

	var <数组名> [<数组长度>]<数组类型>
	//e.g.
	var cheeses [2] string

数组的使用实例,如下:

package main

import "fmt"

func main() {
	var cheeses [2]string
	cheeses[0] = "Mar"
	cheeses[1] = "EPO"
	fmt.Println(cheeses[0])
	fmt.Println(cheeses[1])
	fmt.Println(cheeses)
}

2 使用切片

数组和切片很类似,但是我们可以在切片中添加和删除元素,切片的定义方法如下:

var cheeses = make([]string 2)
  1. 使用关键词var声明一个名为cheeses的变量
  2. 在等号右边,使用Go内置函数make创建一个切片,其中第一个参数为数据类型,第二个参数为长度。在这里创建的切片包含两个字符串元素。
  3. 将切片赋给变量cheeses
package main

import "fmt"

func main() {
	var cheeses = make([]string, 2)
	cheeses[0] = "Mar"
	cheeses[1] = "sfds"
	fmt.Println(cheeses[0])
	fmt.Println(cheeses[1])
	fmt.Println(cheeses)
}

2.1 在切片中添加元素

append
package main

import "fmt"

func main() {
	var cheeses = make([]string, 2)
	cheeses[0] = "Mar"
	cheeses[1] = "sfds"
	cheeses = append(cheeses, "dada")
	fmt.Println(cheeses[0])
	fmt.Println(cheeses[1])
	fmt.Println(cheeses[2])
	fmt.Println(cheeses)
}
append
	cheeses = append(cheeses,"adsfa","afdasf","fadafad")

2.2 从切片中删除元素

从切片中删除元素同样可以使用append()函数来删除,例如:

	cheeses = append(cheeses[:2],cheeses[2+1:]...)

2.3 复制切片中的元素

复制切片的全部或者部分元素,可以使用内置函数copy。在复制切片中的元素前,必须再声明一个类型与该切片相同的切片(还是因为Go是静态类型语言)

package main

import "fmt"

func main() {
	var cheeses = make([]string, 3)
	cheeses[0] = "Mar"
	cheeses[1] = "sfds"
	cheeses[2] = "adsfa"
	var smelly = make([]string, 2)
	copy(smelly, cheeses)
	fmt.Println(smelly)//输出["Mar" "sfds"]
}

使用copy函数复制的切片内容不会超过载体本身的大小,饼再大,大不过烙它的锅;还有就是复制不会对正主有什么影响,毕竟是复制

3 使用映射(map)

  1. 数组和切片是可通过索引值访问的元素集合,而映射是通过键来访问的无序元素编组。大多数编程语言都支持数组:在其它语言中,映射也被称为关联数组、字典或散列。映射在信息查找方面的效率非常高,因为可以之间通过键来检索数据。简单地说,映射可视为键-值对集合。

只需一行代码就可声明并创建一个空映射:

var players = make(map[string]int)
  1. 关键词var声明players变量
  2. 使用make创建了一个映射,键的类型为string,值的类型为int
  3. 将这个空映射赋值给了变量players

应用实例如下:

package main

import "fmt"

func main() {
	var player = make(map[string]int)
	player["cook"] = 32
	player["baaf"] = 24
	player["adsf"] = 64
	fmt.Println(player["cook"])//输出32
	fmt.Println(player)//输出map[adsf:64 baaf:24 cook:32]
}

3.1 删除映射的元素

要从映射中删除元素,可使用内置函数delete。这里注意delete函数的参数是映射名称和键,map中的值不能作为参数

package main

import "fmt"

func main() {
	var player = make(map[string]int)
	player["cook"] = 32
	player["baaf"] = 24
	player["adsf"] = 64
	delete(player, "cook")
	fmt.Println(player)//输出map[adsf:64 baaf:24]
}

4 注意事项

  1. 除非确定必须使用数组,否则使用切片。切片能够轻松的添加和删除元素,还无需处理内存分配问题
  2. 没有从切片中删除元素的内置函数,只能使用append来删除切片中的元素
  3. 建立映射时,不需要指定映射的长度。使用内置函数make创建映射是,可使用第二个参数,但这个参数只是容量提示,而非硬性规定(就像python中变量后面的冒号是一个意思)。映射可根据要存储的元素数量自动增大,因此没有必要指定长度。
参考书籍
 [1]: 【Go语言入门经典】[英] 乔治·奥尔波 著 张海燕 译
题外话:
  1. 感觉这本书的知识点讲的实在是有些浅,可能是自己学的有问题?
  2. 速刷过去,研究黑砖,加油……