阅读 64

Go中劳苦功高的“数组” | Go 主题月

在这月黑风高的夜晚,一个大茶缸的信仰者,从暖和的被窝里面爬了出来,坐在电脑前,一切,都只是为了它—— 掘金大茶缸!!!!。

下载.jpg

前言

好了,皮完了,咱们进入正题,今天我要聊的东西是在Go里面,最为劳苦功高的一个东西,那就是数组

相信大家对数组并不陌生,但是Go里面的数组,又跟我们平常使用的不太一样,至于哪里不一样,接下来我会在文章里面,一一述说。

数组的一些基础

首先,提到一个数据结构,自然离不开的,就是要怎么样去声明它,而在Go里,想要声明一个数组,有以下几种方法

func main()  {
	var a [5]int
	b := [4]string{"a","b","c","d"}
	fmt.Print(a,b) // [0 0 0 0 0] [a b c d]
}
复制代码

这里的中括号里面的数字,代表了这个数组的长度大小,在对它进行修改的时候,要避免越界的情况出现,意思就是使用的索引不能大于数组的本身大小,否则,会造成panic的错误。

如果我们在初始化的时候,不知道这个数组的大小,那么编辑器也会通过你传入的值,推断出这个数组的大小,从而去申请内存,但这里必须使用的是复合字面量

a := [...]int {1,2,3,4,5} //后续会介绍复合字面量的其他用法
复制代码

数组被复制

这里是一个Go中相对于其他语言很不一样的地方,在Go中的数组,无论是赋值给新的变量,还是说在函数内传递,他都会产生一个新的副本

    a := [...]int {1,2,3,4,5}
    b := a
    b[1] = 10
    fmt.Print(a,b) // [1 2 3 4 5] [1 10 3 4 5]
复制代码

这里我们可以看到,如果当我们把数组a赋值给b之后,尝试改变b的值,但是a并没有随之改变,也就是说,数组b相对于数组a,它是一个新的数组。

数组的迭代

在数组想要跌迭代一个数组,也会有两种方式,其中一种是我们比较常见的for循环,另一种则是Go中比较特别的range循环(使用起来有点像forEach)

    a := [...]int {1,2,3,4,5}
    //常规的for循环
    for i:=0; i<len(a); i++ {
            fmt.Print(a[i])
    }
    //range循环
    for index,value := range a{
        这里的有两个参数,一个是索引,一个是值
    }
复制代码

最后

在Go中,其实我们并不会去直接的使用一个数组这个数据结构去进行开发,而是会选择另外一个Go独有的数据类型,那就是切片,至于切片的相关知识,留到下一篇文章再说。

201906241507042850.gif

不好意思,这篇文章灌水了,下一个关于切片的,保证干货满满!!!

文章分类
后端
文章标签