声明一个数组变量的同时为该变量赋值。 var numbers = [3]int{1, 2, 3} 另一种便捷方法, 类型字面量中省略代表其长度的数字 var numbers = [...]int{1, 2, 3}
对于数组来说,索引值既不能小于0也不能大于或等于数组值的长度。
索引值的最小有效值从0开始。
len是Go语言的内建函数的名称。 该函数用于获取字符串、数组、切片、字典或通道类型的值的长度。 var length = len(numbers)
如果我们只声明一个数组类型的变量而不为它赋值,那么该变量的值将会是指定长度的、其中各元素均为元素类型的零值(或称默认值)的数组值。 var numbers2 [5]int; 则它的值会是[5]int{0, 0, 0, 0, 0}
切片
var numbers3 = [5]int{1, 2, 3, 4, 5} var slice1 = numbers3[1:4] 切片表达式一般由字符串、数组或切片的值以及由方括号包裹且由英文冒号“:”分隔的两个正整数组成。 这两个正整数分别表示 [ 元素下界索引 : 元素上界索引 ]。 切片表达式numbers3[1:4]的求值结果为[]int{2, 3, 4}。
切片的更多操作方法 numbers3[1:4:4] 这第三个正整数被称为容量上界索引。 它的意义在于可以把作为结果的切片值的容量设置得更小。
append会对切片值进行扩展并返回一个新的切片值。 slice1 = append(slice1, 6, 7) slice1的值变为了[]int{2, 3, 4, 6, 7}
切片方法--复制 该操作的实施方法是调用copy函数。该函数接受两个类型相同的切片值作为参数, 并会把第二个参数值中的元素复制到第一个参数值中的相应位置(索引值相同)上。 这种复制遵循最小复制原则,即:被复制的元素的个数总是等于长度较短的那个参数值的长度 var slice4 = []int{0, 0, 0, 0, 0, 0, 0} copy(slice4, slice1) 通过上述复制操作,slice4会变为[]int{2, 3, 4, 6, 7, 0, 0}
字典
字典类型的字面量如下:
map[K]T
其中,“K”意为键的类型,而“T”则代表元素(或称值)的类型
字典的键类型必须是可比较的,否则会引起错误。也就是说,它不能是切片、字典或函数类型。
map[int]string{1: "a", 2: "b", 3: "c"}
赋值给一个变量: mm := map[int]string{1: "a", 2: "b", 3: "c"}
运用索引表达式取出字典中的值
b := mm[2]
对于字典值来说,如果其中不存在索引表达式欲取出的键值对, 那么就以它的值类型的空值(或称默认值)作为该索引表达式的求值结果
针对字典的索引表达式可以有两个求值结果。
第二个求值结果是bool类型的。
它用于表明字典值中是否存在指定的键值对。
从字典中删除键值对,调用内建函数delete delete(mm, 4) 无论mm中是否存在以4为键的键值对,delete都会“无声”地执行完毕。
有则删除,无则不做。
与切片类型相同,字典类型属于引用类型。它的零值即为nil。
func testMap() { var a map[string]string = map[string]string{ "key": "value", } a["abc"] = "efg1" a["abc"] = "efg2" a["abc1"] = "efg" fmt.Println(a)//map[abc:efg2 abc1:efg key:value] } func testMap2() { a := make(map[string]map[string]string, 100) a["key1"] = make(map[string]string) a["key1"]["key2"] = "abc2" a["key1"]["key3"] = "abc3" a["key1"]["key4"] = "abc4" a["key1"]["key5"] = "abc5" fmt.Println(a) //map[key1:map[key2:abc2 key3:abc3 key4:abc4 key5:abc5]] c := a["key1"]["key5"] fmt.Println(c) //abc5 delete(a, "key1") } func trans(a map[string]map[string]string) { for k, v := range a { fmt.Println(k) for k1, v1 := range v { fmt.Println(" ", k1, v1) } } }