关于Golang语言数组索引的有趣现象

在Twitter上看到Dave Cheney提了个pop quiz 勾起了我的好奇心,可以猜下下面这段代码的运行结果。

package main

import "fmt"

func main() {
	a := [...]int{5, 4: 1, 0, 2: 3, 2, 1: 4}
	fmt.Println(a)
}

go run 一下结果就出来了 但是比较有意思的是结果是

[5 4 3 2 1 0]

下面就一步步地分析是什么情况

[number:value] 在go的数组中代表的是在索引未number处的位置上值为value 如果索引值越界了就会重置。

5 _ _ _ _ _ index : 0, value : 5

5 _ _ _ 1 _ index : 4, value : 1

5 _ _ _ 1 0 index : 5, value : 0 因为上一个操作的元素索引为4 ([4:1])所以下一个操作的元素索引自动加1

5 _ 3 _ 1 0 index : 2, value : 3

5 _ 3 2 1 0 index : 3, value : 2 因为上一个操作的元素索引为2 ([2:3])所以下一个操作的元素索引自动加1

5 1 3 2 1 0 index : 1, value : 4

操作数组元素的顺序是按照声明时的顺序,顺序操作的。5 1 0 3 2 4就是按照这个顺序 进行操作的。

所以如果把代码改一下就会报错 比如下面的例子

package main

import "fmt"

func main() {
	a := [...]int{5, 4: 1, 0, 2: 3, 2, 1: 4, 10}
	fmt.Println(a)
}

结果

prog.go:6: duplicate index in array literal: 2
 [process exited with non-zero status]

报错信息是 第二个索引重复了

接着上面的分析

5 1 3 2 1 0 index : 1, value : 4 这时如果继续操作下一个元素根据规则 索引加1

也就是 要对index : 2 的元素进行 value : 10的操作 但是之前我们已经在索引为2时赋值过了 所以就会有异常

duplicate index in array literal: 2

原文发布于微信公众号 - Golang语言社区(Golangweb)

原文发表时间:2017-01-10

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏王硕

原 PostgreSQL的系统函数分析记录

1313
来自专栏水击三千

ARCGIS接口详细说明

ArcGIS接口详细说明 目录 ArcGIS接口详细说明... 1 1.      IField接口(esriGeoDatabase)... 2 2.     ...

4136
来自专栏Java3y

Mybatis【关联映射】

Mybatis【多表连接】 我们在学习Hibernate的时候,如果表涉及到两张的话,那么我们是在映射文件中使用<set>..<many-to-one>等标签将...

2603
来自专栏盛国存的专栏

A Bite of GoLang(上)

A bite of GoLang(浅尝GoLang),本文只是Go语言的冰山一角,本文包含作者学习Go语言期间积累的一些小的经验,同时为了方便让读者了解到Go语...

55310
来自专栏跟着阿笨一起玩NET

C#操作操作类库五(字符串的常用扩展方法)

1181
来自专栏张善友的专栏

深入浅出事件流处理NEsper(二)

NEsper使用的事件类型来描述事件的类型信息。你的应用在启动时可能预先配置定义事件类型,或者在运行时通过API或EPL语法动态的增加事件类型。 EPL中的cr...

19910
来自专栏博客园

Core官方DI解析(4)--CallSiteRuntimeResolver

这两个类都在其CallSiteVisitor<TArgument, TResult>基类中

863
来自专栏守候书阁

实例感受-es6的常用语法和优越性

前几天,用es6的语法重写了我的一个代码库,说是重写,其实改动的并不多,工作量不大。在重写完了的时候,就个人总结了一下es6常用的一些常用的语法和比es5优越的...

823
来自专栏Golang语言社区

关于Golang语言数组索引的有趣现象

在Twitter上看到Dave Cheney提了个pop quiz 勾起了我的好奇心,可以猜下下面这段代码的运行结果。 package main impor...

35210
来自专栏Java学习网

Java Web中pageContext的20个实用方法——开发常用

pageContext属性默认在当前页面是共享的 pageContext表示一个javax.servlet.jsp.PageContext对象。pageCont...

2445

扫码关注云+社区

领取腾讯云代金券