go 数组

go数组是一个由固定长度的特定类型元素组成的序列,元素个数可以是多个或者0个。0个就是空数组,空数组不占用内存(用的场景如通道的同步操作,避免分配额外的内存)。长度不同或者元素类型不同的数组都是不同的类型,长度是数组类型的一部分。数组用法如下例子:

package main

import "fmt"

func main()  {
	var a [3]int
	var b = [...]int{1, 2, 3}
	var c = [...]int{1:2, 2:3}
	var d = [...]int{1, 2, 4:5, 5:6}
	fmt.Printf("a = %#v\n", a) //a = [3]int{0, 0, 0}
	fmt.Printf("b = %#v\n", b) //b = [3]int{1, 2, 3}
	fmt.Printf("c = %#v\n", c) //c = [3]int{0, 2, 3}
	fmt.Printf("d = %#v\n", d) //d = [6]int{1, 2, 0, 0, 5, 6}

	var copyA = a
	copyA[0] = 8
	fmt.Printf("a = %#v\n", a)//a = [3]int{0, 0, 0}
	var copyB = &b
	copyB[0] = 9
	fmt.Printf("b = %#v\n", b)//b = [3]int{9, 2, 3}

	for i, v := range copyB {
		fmt.Println(i, v)
		//0 9
		//1 2
		//2 3

	}

	for i := range copyB {
		fmt.Println(i)
		//0
		//1
		//2

	}

	fmt.Println(cap(copyB)) //3

    var times [3][0]int
	for i := range times {
		println(i, "times")
        //0 times
        //1 times
        //2 times
	}
}

上面示例解析:

1. GO语言中数组是值语义,一个数组变量即表示整个数组,它并不是隐式地指向第一个元素的指针,而是一个完整的值。数组赋值会复制整个数据,是值传递

2.上例中copyB是一个数组指针(指向数组的指针),注意它是个指针而不是数组,但是除了它的类型跟数组不一样外,它的用法跟数组变量一模一样,包括range用法。

3. range只赋值给一个元素时,赋值的是索引的值。

4. 可以把数组当作是一个结构体使用,索引就标识结构体中的字段名。

5. times占用内存为0,不用付出额外的内存代价,就能实现times次迭代

数组不仅可以定义数值数组,还能定义字符串数组结构体数组函数数组接口数组通道数组等。

你可能感兴趣的:(golang,golang,排序算法,算法)