go陷阱之 range中append

猜猜这段代码会不会一直运行

package main

func main() {
    a := []int{1, 2, 3}
    s := a[:]
    for i := range s {
        s = append(s, i)
    }
}

答案:不会。因为range 其实是一个语法糖。只是把语句展开而已。

// The loop we generate:
//   len_temp := len(range)
//   range_temp := range
//   for index_temp = 0; index_temp < len_temp; index_temp++ {
//           value_temp = range_temp[index_temp]
//           index = index_temp
//           value = value_temp
//           original body
//   }
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容