来自公众号: 新世界杂货铺

循环永动机

Q1: 如果我们在遍历数组的同时修改数组元素,能否得到一个永远都不会停止的循环呢?

func main() {arr := []int{1, 2, 3}for _, v := range arr {arr = append(arr, v)}fmt.Println(arr)
}
// 输出: 1 2 3 1 2 3

上述代码的输出意味着循环只遍历了原始切片中的三个元素,我们遍历切片时追加的元素不会增加循环的执行次数, 所以循环最终还是停了下来

答: 对于所有的range循环, Go语言会在编译期间将原切片或者数组赋值给一个新的变量ha, 在赋值的过程中就发生了拷贝, 所以我们遍历的切片已经不是原始的切片变量了

神奇的指针

Q2: 我们遍历一个数组时,如果获取range返回变量的地址并保存到另一个数组或哈希时, 就会遇到令人困惑的现象

func main() {arr := []int{1, 2, 3}newArr := []*int{}for _, v := range arr {newArr = append(newArr, &v)}for _, v := range newArr {fmt.Println(*v)}
}
// 输出: 3 3 3

答: 遇到这种同时遍历索引和元素的range循环时, go语言会额外创建一个新的v2变量存储切片中的元素, 循环中使用的这个变量v2会在每一次迭代被重新赋值而覆盖, 在赋值时也发生了拷贝. 因为在循环中返回的变量的地址都完全相同, 所以才会出现神奇的指针的现象

map的随机遍历

Q3: go语言中使用range遍历哈希表时, 往往都会得到不同的结果?

答: 但这并不是说明哈希表不稳定, 这是go语言故意这样设计的, 他在运行时为哈希表遍历引入不确定性, 也是告诉所有使用go语言的使用者, 程序不要依赖于哈希表的稳定遍历。

参考

https://draveness.me/golang/docs/part2-foundation/ch05-keyword/golang-for-range/

go 遍历二维数组json_for-range造就循环永动机?快来看看go中for-range的那些事!相关推荐

  1. python中遍历二维数组_python遍历二维数组-女性时尚流行美容健康娱乐mv-ida网

    女性时尚流行美容健康娱乐mv-ida网 mvida时尚娱乐网 首页 美容 护肤 化妆技巧 发型 服饰 健康 情感 美体 美食 娱乐 明星八卦 首页  > 高级搜索 二 维 数组 5.2.1 二 ...

  2. 二维数组更改vue_使用vue中的v-for遍历二维数组的方法

    如下所示: {{itemss}} 其中,data数据为: this.data = [ [ { type: '', name: '资产', start: '期末余额', end: '期初余额' }, { ...

  3. C++知识点杂记1——typedef、static_cast、const_cast、遍历二维数组、聚合类

    1.typedef typedef一般是对某种类型的类型别名(不是变量别名) typedef double db;void mixtypename() {db d=1.2;cout<<d& ...

  4. 动态二维数组赋值及for循环遍历和toString遍历

    package com.Summer_0421.cn;import java.util.Arrays;/*** @author Summer* 动态二维数组赋值及for循环遍历和toString遍历* ...

  5. 遍历二维数组_Java编程基础阶段笔记 day06 二维数组

    二维数组 笔记Notes 二维数组 二维数组声明 二维数组静态初始化与二位初始化 二维数组元素赋值与获取 二维数组遍历 二维数组内存解析 打印杨辉三角 Arrays工具类 数组中常见的异常 二维数组 ...

  6. 微信小程序遍历二维数组

    在微信小程序中遍历二维数组,代码如下 data 中二维数组结构如下 data: {familys:[{familyName:'贾家', users: [{name:'贾宝玉'},{name:'贾元春' ...

  7. 如何创建二维数组 微信小程序_微信小程序遍历二维数组

    在微信小程序中遍历二维数组,代码如下 data 中二维数组结构如下 data: { familys:[ { familyName:'贾家', users: [ {name:'贾宝玉'}, {name: ...

  8. c语言二维数组行优先如何访问快,C/C++遍历二维数组,列优先(column-major)比行优先(row-major)慢,why?...

    C/C++遍历二维数组,列优先(column-major)比行优先(row-major)慢,why? 简单粗暴的答案:存在Cache机制! 稍微啰嗦一点:CPU访问内存(读/写,遍历数组的话主要是读) ...

  9. python遍历二维数组

    最近正好需要读取nc数据,对数据进行插值.首先需要遍历二维数据,复习一下二维数组遍历的操作,操作时要注意数组每行的长度是否是一致的. 具体实例如下所示: # 要读取的nc数据是二维数组 EVEL_0h ...

  10. 漫画:如何螺旋遍历二维数组?

    作者 | 小灰 来源 | 程序员小灰(ID:chengxuyuanxiaohui)  第二天   什么意思呢?我们来举个例子,给定下面这样一个二维数组: 我们需要从左上角的元素1开始,按照顺时针进行螺 ...

最新文章

  1. mysql not null 性能_如何使用NULL提高MySQL查询的性能?
  2. java zip打包与乱码的解决
  3. MySQL 的 binlog 编号竟然可以这么大!
  4. OpenCV图像处理——对比两张图像差异的位置并标记
  5. C语言unit test单元测试类的实现(附完整源码)
  6. UnpooledHeadByteBuf源码分析
  7. 计算机应用基础分析与报告,y计算机应用基础出题分析报告.doc
  8. Linux 内核总线
  9. OpenShift 4 之 GitOps(3)用Helm+ArgoCD部署应用,并保持配置同步
  10. es6 Map,Set 和 WeakMap,WeakSet
  11. 【工具使用】Keil5软件使用-基础使用篇
  12. zmap扫描mysql_zmap使用笔记
  13. java weka 分类_Weka开发[48]——用Weka文本分类
  14. 高德地图 经纬度查询位置
  15. C语言入门-绝对值(abs)
  16. 使用Xbox360手柄控制你的turtlebot/rbx1/mrobot小车机器人
  17. android studio 导入一个已有的android studio project作为lib使
  18. 那些年的成长,爱情的总结
  19. 2023年长安大学油气田地质与开发考研上岸前辈备考经验
  20. Maven学习——maven基础

热门文章

  1. idea右边maven全爆红_通过Idea创建Spring Boot java项目
  2. python des加密文件_python DES3 加密解密
  3. protected的继承方式有什么特点_草莓的授粉方式有哪些?各有什么特点
  4. leaflet调用mysql_PHP和MySQL以及Leaflet API
  5. DLL的Export和Import及extern
  6. Halcon PDF文档(hdevelop_users_guide)学习总结之二——创建新算子
  7. 开发者应该关注的五项Web新兴技术:WebGL和SVG名列其中
  8. 《机器学习实战》KNN算法实现
  9. 让sublime编译php、js
  10. java设计模式之装饰者模式