声明数组
要创建数组 ,先声明一个数组变量,并指定其长度和数据类型。
var fruits [2]string
声明后,便可对数组赋值。
fruits[0] = "apple"
fruits[1] = "banana"
也可以直接声明并赋值。
var fruits = [2]string{"apple","banana"}
// or
fruits := [2]string{"apple","banana"}
如果数组长度不确定,可以使用 … 代替数组的长度,编译器会根据元素个数自行推断数组的长度:
var fruits = [...]string{"apple","banana"}
// or
fruits := [...]string{"apple","banana"} //根据字段个数
如果设置了数组的长度,我们还可以通过指定下标来初始化元素:
// 将索引为 1 和 3 的元素初始化
number := [5]float32{1:2.0 , 3:7.0}
初始化数组中 {} 中的元素个数不能大于 [] 中的数字。
切片
使用数组存在一定的局限性,比如数组是定长的,无法在数组中添加元素,使用切片可以添加和删除元素,还可以复制切片中的元素。可以将切片视为轻量级的数组包装器。
声明切片
切片不需要说明长度,创建默认长度为2的空切片
var fruits = make([]string, 2)
也可以直接声明并赋值。
var fruits = []string{"apple","banana"}
// or
fruits := []string{"apple","banana"}
添加元素
在切片中添加元素,append会自动调整切片的长度
fruits = append(fruits,"orange")
函数append是一个不定参数函数,可以在里面添加任意个数的值。
删除元素
在切片中删除元素,也可以使用append,例如删除索引为2的元素。
fruits = append(fruits[:2] ,fruits[2+1:]...)
复制元素
要复制切片的全部或部分元素,可使用函数 copy。在复制元素前,必须声明一个类型与原切片相同的切片。例如,只复制切片的部分元素到新切片。
copy(newfruits,fruits[1:])
映射
数组和切片是可以通过索引值访问的元素集合,而映射是通过键来访问的无序元素编组。类似于其他编程语言中的关联数组、字典或散列。简单地说,映射就是键值对集合。
声明映射
var fruits = make(map[string]int)
通过make函数创建一个映射,其中键的类型为字符串,值的类型为整数。
添加键值对
fruits["apple"] = 10
fruits["banana"] = 20
可直接在映射中动态地添加元素 ,而无须调整映射的长度。
删除元素
使用delete删除映射中的元素,将键作为参数传递给delete。
delete(fruits,"apple")
总结
-
使用数组还是切片?
答: 除非确定必须使用数组,否则请使用切片,切片能够随意添加和删除元素,还无须处理内存分配问题。
-
没有从切片中删除元素的内置函数吗?
答:不能将 delete 用于切片 没有专门用于从切片中删除元素的函数,但可使用内append 来完成这种任务,您还可创建子切片
-
需要指定映射的长度吗?