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次迭代

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值