成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Golang 語言 For 和 For-range 的區別

開發 后端
在 Golang 語言中,僅有 for 一種循環語句,但是可以模擬 while (condition) {} 和 while (true) {}。除此之外,Golang 語言還引入了另外一個關鍵字 range,我們也可以配合 for 關鍵字,使用 for-range循環遍歷數據。

[[442133]]

1介紹

在 Golang 語言中,僅有 for 一種循環語句,但是可以模擬 while (condition) {} 和 while (true) {}。

除此之外,Golang 語言還引入了另外一個關鍵字 range,我們也可以配合 for 關鍵字,使用 for-range循環遍歷數據。

本文我們介紹一下使用 for 和 for-range 循環遍歷數據的區別。

2區別

在 Golang 語言程序開發中,經常會使用循環遍歷數據,因為 Golang 語言提供了 for-range 范圍遍歷,可以更加方便的幫助我們循環遍歷數據,比如數據和數組指針、切片、字符串、映射和通道,所以我們比較喜歡使用 for-range 范圍遍歷替代 for 普通遍歷。

實際上,使用范圍遍歷 for-range 和使用普通遍歷 for 是有區別的,因為范圍遍歷會在遍歷之前,先拷貝一份被遍歷的數據,然后遍歷拷貝的數據。

3踩「坑」

在 Golang 語言程序開發中,因為不了解使用范圍遍歷切片和使用普通遍歷切片的區別,新手經常會在此踩“坑”。

范圍遍歷切片

  1. func main() { 
  2.  s := []int{0, 1} 
  3.  for _, v := range s { 
  4.   s = append(s, v) 
  5.  } 
  6.  fmt.Printf("s=%v\n", s) 

輸出結果:

  1. s=[0 1 0 1] 

普通遍歷切片

  1. func main() { 
  2.  s := []int{0, 1} 
  3.  for i := 0; i < len(s); i++ { 
  4.   s = append(s, s[i]) 
  5.  } 
  6.  fmt.Printf("s=%v\n", s) 

輸出結果:

閱讀上面這段代碼,我們分別使用范圍遍歷和普通遍歷,循環遍歷同一個切片。范圍遍歷可以輸出結果,而普通遍歷是無限循環,無法輸出結果。

原因是范圍遍歷在開始遍歷數據之前,會先拷貝一份被遍歷的數據,所以在遍歷過程中去修改被遍歷的數據,只是修改拷貝的數據,不會影響到原數據。

在該示例代碼中,我們在循環過程中,不斷追加數據到切片,原以為范圍遍歷也可以像普通遍歷那樣,無限循環,但是實際上結果并非所想。

同時,因為范圍遍歷會拷貝被遍歷數據,所以在需要遍歷內存占用比較大的數組時,建議使用普通遍歷,如果必須使用范圍遍歷,我們可以遍歷數組的地址或先將數組轉換為切片,然后再遍歷。

4總結

本文我們介紹了在 Golang 語言中,循環遍歷數據的兩種方式之間有什么區別,其中最大的區別,也是最容易踩“坑”的地方,就是范圍遍歷會在遍歷之前,先拷貝一份被遍歷的數據,然后遍歷拷貝的數據。

如果讀者朋友們不清楚這個區別,在程序開發中,肯定會遇到這樣或那樣的“坑”,而且還很難發現和繞過。

除了文中列舉的示例,相信讀者朋友們肯定還有很多其他踩“坑”場景,歡迎在留言區與大家分享。

參考資料:

https://gobyexample.com/range

https://go.dev/tour/moretypes/16

https://go.dev/ref/spec#For_statements

https://www.geeksforgeeks.org/range-keyword-in-golang/

https://golangbyexample.com/understand-for-range-loop-golang/

https://www.educative.io/edpresso/what-is-the-for-range-loop-in-golang

 

責任編輯:武曉燕 來源: Golang語言開發棧
相關推薦

2022-02-07 23:07:19

Golang語言Modules

2023-04-30 23:16:53

Go數組切片

2020-10-22 06:59:09

GolangRust語言

2023-11-29 07:47:29

Golang函數

2021-06-09 23:36:46

Golang語言版本

2023-03-29 08:03:53

2022-02-13 23:10:46

Golang語言變量

2021-06-07 23:19:44

Golang語言 Defer

2021-04-28 09:02:48

Golang語言Context

2021-09-13 05:02:49

GogRPC語言

2010-03-17 18:38:53

Java編程語言

2022-07-01 11:56:54

C語言C++編程語言

2021-05-28 05:34:06

Golang語言編程

2022-08-30 22:21:41

gotop監視器圖形

2022-10-27 19:32:20

切片golang數組

2009-04-30 15:15:01

Java抽象類接口

2023-03-24 08:01:27

Go語言內存

2022-07-28 12:17:36

C語言typedef#define

2021-10-10 23:02:49

Golang語言代碼

2018-08-01 15:10:02

GolangPython語言
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品成人在线 | av一级毛片| 国产成人综合在线 | 女人牲交视频一级毛片 | 三级黄色片在线 | 精品国产久 | 久久久成人免费视频 | 中文在线a在线 | 91在线精品一区二区 | 精品免费国产一区二区三区四区介绍 | 久久精品二区亚洲w码 | 精品一区国产 | 美女国产精品 | 久久国产欧美日韩精品 | 黄色网址在线播放 | 在线观看国产精品一区二区 | 亚洲一区二区高清 | 一级片aaa | 国产91视频播放 | 亚洲国产成人精品女人久久久 | 国产一区欧美 | av网站免费在线观看 | 午夜视频在线观看一区二区 | 精品国产乱码久久久久久牛牛 | 日韩中文视频 | 7799精品视频天天看 | 国内自拍视频在线观看 | 国产亚洲一区在线 | 精品久久久久久久久久久 | 日韩成人一区 | 国产日韩欧美 | 国产综合视频 | 有码一区 | 国产精品九九视频 | 精品欧美一区二区三区久久久 | 欧美国产日韩一区二区三区 | 午夜网站视频 | 国产在线视频一区 | 国产视频中文字幕在线观看 | 草久久| 亚洲免费网站 |