Go语言基础 - 数组

本文详细介绍了Go语言中数组的定义、初始化方式、赋值操作及其在各种场景下的应用,包括数值型、字符串、结构体、函数和接口数组。强调了数组赋值时的复制特性,并给出了避免复制的解决方案。同时,展示了如何遍历数组和使用指针。
摘要由CSDN通过智能技术生成

目录

数组:

一、定义:

二、数组初始化方式:

三、数组的赋值:

四、应用范围


数组:

一、定义:

数组是一个由固定长度的特定类型元素组成的序列,一个数组可以由零个或多个元素组成。

二、数组初始化方式:

1、定义一个数组变量的最基本的方式,数组的长度明确指定,数组中的 每个元素都以零值初始化。

var a [3]int  // 定义一个长度为3的int类型数组, 元素全部为0。

2、定义数组,可以在定义的时候顺序指定全部元素的初始化值,数组的长 度根据初始化元素的数目自动计算。

var b = [...]int{1, 2, 3}  // 定义一个长度为3的int类型数组, 元素为 1, 2, 3。

3、以索引的方式来初始化数组的元素,因此元素的初始化值出现顺序比 较随意。这种初始化方式和 map[int]Type 类型的初始化语法类似。数组的长度以出现的最大的索引为准,没有明确初始化的元素依然用0值初始化。

var c = [...]int{2: 3, 1: 2} // 定义一个长度为3的int类型数组, 元素为 0, 2, 3。

4、混合了第二种和第三种的初始化方式,前面两个元素采用顺序初始 化,第三第四个元素零值初始化,第五个元素通过索引初始化,最后一个元素跟在 前面的第五个元素之后采用顺序初始化。

var d = [...]int{1, 2, 4: 5, 6}  // 定义一个长度为6的int类型数组, 元素为 1, 2, 0, 0, 5, 6.

三、数组的赋值:

当一个数组变量被赋值或者被传递的时候,实际上会复制整个数组。如果数组较大的话,数组的赋值也会有较大的开销。为了避免复制数组带来的开销,可以传递一个指向数组的指针,但是数组指针并不是数组。

var a = [...]int{1, 2, 3} // a 是一个数组

var b = &a // b 是指向数组的指针数组的遍历方式



for i := range a {

        fmt.Printf("a[%d]: %d\n", i, a[i])

}

for i, v := range b {

        fmt.Printf("b[%d]: %d\n", i, v)

}

for i := 0; i < len(c); i++ {

        fmt.Printf("c[%d]: %d\n", i, c[i])

}

四、应用范围

数组不仅仅可以用于数值类型,还可以定义字符串数组、结构体数组、函数数组、接口数组、管道数组等等:

// 字符串数组

var s1 = [2]string{"hello", "world"}

var s2 = [...]string{"你好", "世界"}

var s3 = [...]string{1: "世界", 0: "你好", } 

// 结构体数组

var line1 [2]image.Point

var line2 = [...]image.Point{image.Point{X: 0, Y: 0}, image.Poin

t{X: 1, Y: 1}}

var line3 = [...]image.Point{{0, 0}, {1, 1}}



// 图像解码器数组

var decoder1 [2]func(io.Reader) (image.Image, error)

var decoder2 = [...]func(io.Reader) (image.Image, error){

png.Decode,

jpeg.Decode,

}



// 接口数组

var unknown1 [2]interface{}

var unknown2 = [...]interface{}{123, "你好"}



// 管道数组

var chanList = [2]chan int{}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值