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/
在源碼中的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語法時,實際是先對原始數據進行了賦值操作,在真正執行迭代時,實際操作的是副本數據