golang 条件语句 for range 分析


for range 作为 golang中的语法糖提供了便利操作;

对于for range 支持 的数据类型包含:

  • 数组以及指向数组的指针
  • 切片
  • 字典
  • 通道
  • 字符串

在range的语法糖中提供了一下特殊操作

https://blog.cyeam.com/golang/2018/10/30/for-interals

https://garbagecollected.org/2017/02/22/go-range-loop-internals/

https://github.com/golang/gofrontend/blob/e387439bfd24d5e142874b8e68e7039f74c744d7/go/statements.cc#L5579

在源码中的lower_range_slice 遍历切片的注释中存在

// The loop we generate:
  //   for_temp := range
  //   len_temp := len(for_temp)
  //   for index_temp = 0; index_temp < len_temp; index_temp++ {
  //           value_temp = for_temp[index_temp]
  //           index = index_temp
  //           value = value_temp
  //           original body
  //   }
  //

  展示的为range语法糖编译为golang语句后真实执行

可以看到在真实执行range语法时,实际是先对原始数据进行了赋值操作,在真正执行迭代时,实际操作的是副本数据


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM