关于Golang语言数组索引的有趣现象
时间:2022-05-05
本文章向大家介绍关于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
- Javascript: 世纪机器语言?
- OpenDaylight与Mininet应用实战之基本环境搭建一
- 永恒不变的魅力
- MobileNet教程(2):用TensorFlow搭建安卓手机上的图像分类App
- OpenDaylight与Mininet应用实战之流表操作三
- 天啊,这个围笑代表什么?麻省理工的AI比你更懂 | 论文+Demo
- elixir:灵丹妙药?or 徒有其名?
- OpenDaylight与Mininet应用实战之三层转发机制四
- 程序员效率指南
- 【每日播报】OpenDaylight与Mininet应用实战之复杂网络验证(五)
- Docker hackathon, teamspark 及团队协作软件设计上的思考
- 应用开发中的网络安全
- 力作|phpcms_v9.6.1 任意文件下载漏洞
- 从开发者的角度看:打包和部署
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- android popupwindow用法详解
- SpringAOP + 注解实现日志管理
- 删除一个表中所有含重复字段的数据
- stm32mp157开发板常用系统工具使用
- android实现筛选菜单效果
- AppCMS注入及评论xss漏洞
- css属性为 { flex: 1 }时表示的意思
- Android studio 实现手机扫描二维码功能
- Nginx 平滑升级与回滚
- Android实现通用筛选栏
- Android实现关机后数据不会丢失问题
- Canvas 进阶(五)实现图片滤镜效果
- 将IP地址字符串分割成数组
- android监听器实例代码
- (火狐)Selenium WebDriver测试 NotADirectoryError: [WinError 267] 目录名称无效。