使用如下语法创建数组。
[length]Type
[N]Type{value1, value2, ..., valueN}
[...]Type{value1, value2, ..., valueN}数组的长度是固定的,不可以修改。
数组的容量cap()和长度len()都等于数组的长度。
数组按值传递,及传递给函数的是数组的副本,而切片是引用类型,传递的是指针。
package main
import "fmt"
func changeArray(a [3]int) {
a[0] = 3
}
func main() {
myarray := [3]int{1, 2, 3}
changeArray(myarray)
fmt.Println(myarray) // 因为myarray是数组,所以打印结果为 [1 2 3]
}package main
import "fmt"
func changeArray(a []int) {
a[0] = 3
}
func main() {
myarray := []int{1, 2, 3}
changeArray(myarray)
fmt.Println(myarray) // 因为myarray是切片,所以打印结果为 [3 2 3]
}可以使用下面的方法创建切片。
make([]Type, length, capacity)
make([]Type, length)
[]Type
[]Type(value1, value2, ..., valueN)多个切片如果共享一个底层数组,那么对其中一个切片数值的改变,也会影响其他切片。
可以使用for index, item := range s {}来遍历切片s。
可以使用s = append(s, "a", "b", "c")或者s = append(s, t...)来将元素a, b, c和切片t追加到切片s中。
可以使用nr = copy(s, t)将t切片中的内容拷贝到s中。
可以使用标准库中的sort包来对排序和搜索切片。
package main
import (
"fmt"
"sort"
)
func main() {
myarray := []int{1, 3, 2}
files := []string{"Test.conf", "utils.go", "Makefile"}
target := "Makefile"
fmt.Println(sort.IntsAreSorted(myarray)) // false
sort.Ints(myarray)
fmt.Println(myarray) //[1 2 3]
sort.Strings(files)
fmt.Printf("%q\n", files) // ["Makefile" "Test.conf" "utils.go"]
i := sort.Search(len(files),
func(i int) bool { return files[i] >= target })
if i < len(files) && files[i] == target {
fmt.Printf("found \"%s\" at files[%d]\n", target, i) // found "Makefile" at files[0]
}
}make(map[KeyType]ValueType, initialCapacity)make(map[KeyType]ValueTypemap[KeyType]ValueType{}map[KeyType]ValueType{key1: value1, ..., keyN: valueN}m[k] = v: 赋值v给映射的键值kdelete(m, k): 删除map中的kv := m[k]: 将map中k对应的值赋值给vv, found := m[k]: 如果k值不存在,将v赋值为0,found设为falselen(m): 返回map中的键值对数目