前言,在本章中,将学习关于数组的相关知识
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)
- 使用关键词var声明一个名为cheeses的变量
- 在等号右边,使用Go内置函数make创建一个切片,其中第一个参数为数据类型,第二个参数为长度。在这里创建的切片包含两个字符串元素。
- 将切片赋给变量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)
- 数组和切片是可通过索引值访问的元素集合,而映射是通过键来访问的无序元素编组。大多数编程语言都支持数组:在其它语言中,映射也被称为关联数组、字典或散列。映射在信息查找方面的效率非常高,因为可以之间通过键来检索数据。简单地说,映射可视为键-值对集合。
只需一行代码就可声明并创建一个空映射:
var players = make(map[string]int)
- 关键词var声明players变量
- 使用make创建了一个映射,键的类型为string,值的类型为int
- 将这个空映射赋值给了变量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 注意事项
- 除非确定必须使用数组,否则使用切片。切片能够轻松的添加和删除元素,还无需处理内存分配问题
- 没有从切片中删除元素的内置函数,只能使用append来删除切片中的元素
- 建立映射时,不需要指定映射的长度。使用内置函数make创建映射是,可使用第二个参数,但这个参数只是容量提示,而非硬性规定(就像python中变量后面的冒号是一个意思)。映射可根据要存储的元素数量自动增大,因此没有必要指定长度。
参考书籍
[1]: 【Go语言入门经典】[英] 乔治·奥尔波 著 张海燕 译
题外话:
- 感觉这本书的知识点讲的实在是有些浅,可能是自己学的有问题?
- 速刷过去,研究黑砖,加油……