好湿?好紧?好多水好爽自慰,久久久噜久噜久久综合,成人做爰A片免费看黄冈,机机对机机30分钟无遮挡

主頁 > 知識庫 > 詳解Go語言中for range的坑

詳解Go語言中for range的坑

熱門標簽:賺地圖標注的錢犯法嗎 澳門防封電銷卡 廣東語音外呼系統供應商 智能電銷機器人營銷 長沙ai機器人電銷 烏魯木齊人工電銷機器人系統 福州鐵通自動外呼系統 地圖標注測試 濮陽自動外呼系統代理

前言

Go 中的for range組合可以和方便的實現對一個數組或切片進行遍歷,但是在某些情況下使用for range時很可能就會被"坑",下面用一段代碼來模擬下:

func main() {
  arr1 := []int{1, 2, 3}
  arr2 := make([]*int, len(arr1))

  for i, v := range arr1 {
    arr2[i] = v
  }

  for _, v := range arr2 {
    fmt.Println(*v)
  }
}

代碼解析:

  • 創建一個int slice,變量名為arr1并初始化 1,2,3 作為切片的值。
  • 創建一個*int slice,變量名為arr2。
  • 通過for range遍歷arr1,然后獲取每一個元素的指針,賦值到對應arr2中。
  • 逐行打印arr2中每個元素的值。

從代碼上看,打印出來的結果應該是

1
2
3

然而真正的結果是

3
3
3

原因

因為for range在遍歷值類型時,其中的v變量是一個值的拷貝,當使用獲取指針時,實際上是獲取到v這個臨時變量的指針,而v變量在for range中只會創建一次,之后循環中會被一直重復使用,所以在arr2賦值的時候其實都是v變量的指針,而v最終會指向arr1最后一個元素的值拷貝。

來看看下面這個代碼,用for i來模擬for range,這樣更易于理解:

func main() {
  arr1 := []int{1, 2, 3}
  arr2 := make([]*int, len(arr1))

  var v int
  for i:=0;ilen(arr1);i++ {
    v = arr1[i]
    arr2[i] = v
  }

  for _, v := range arr2 {
    fmt.Println(*v)
  }
}

解決方案

傳遞原始指針

func main() {
  arr1 := []int{1, 2, 3}
  arr2 := make([]*int, len(arr1))

  for i := range arr1 {
    arr2[i] = arr1[i]
  }

  for _, v := range arr2 {
    fmt.Println(*v)
  }
}

使用臨時變量

func main() {
  arr1 := []int{1, 2, 3}
  arr2 := make([]*int, len(arr1))

  for i, v := range arr1 {
    t := v
    arr2[i] = t
  }

  for _, v := range arr2 {
    fmt.Println(*v)
  }
}

使用閉包

func main() {
  arr1 := []int{1, 2, 3}
  arr2 := make([]*int, len(arr1))

  for i, v := range arr1 {
    func(v int){
       arr2[i] = v
    }(v)
  }

  for _, v := range arr2 {
    fmt.Println(*v)
  }
}

官方提示

由于這一問題過于普遍,Golang甚至將其寫入了文檔的『常見錯誤』部分:文檔

到此這篇關于詳解Go語言中for range的"坑"的文章就介紹到這了,更多相關Go語言for range內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • golang中for range的取地址操作陷阱介紹
  • Go語言for range(按照鍵值循環)遍歷操作
  • go for range遍歷二維數組的示例
  • go for range坑和閉包坑的分析
  • go實現for range迭代時修改值的操作

標簽:慶陽 廣西 調研邀請 阿克蘇 西雙版納 太原 德州 貴陽

巨人網絡通訊聲明:本文標題《詳解Go語言中for range的坑》,本文關鍵詞  詳解,語,言中,for,range,的坑,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《詳解Go語言中for range的坑》相關的同類信息!
  • 本頁收集關于詳解Go語言中for range的坑的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 亚洲精品无码乱码成人91| 精品伊人久久大香线蕉网站| 99er精品尤物高清视频| 老司机深夜福利影院| 国产高清a| 亚洲精品中文字幕久久久久下载| 澳门福利视频在线观看| 女贱奴请主人踩贱乳调教h| 嗯灬啊灬把腿张开灬动态图| 欧美日韩国产在线一区| cheaper.work18c.mic查询| 秘密的女人| 国产精品久久精品牛牛影视| 天海翼大胆粉苞人体图片| 黑人做爰又粗又大视频| 黑料正能量网站入口| 精品三级久久久久久久电影聊斋| 国产伦精品一区二区三区电影动画| 99亚洲国产精品精华液| 羞羞视频在线网站观看| 青草视频在线看| 女同桌说她奶好涨让我帮她| 国产亚洲精品无99A在线观看| 国产综合久久久蜜臀九色最新章节| 岛国片免费在线观看| 日本黄色爽| 天海翼精品久久中文字幕| 久久久欧美精品sm网站| 国产美女裸体无遮挡免费视频试看 | 电影天堂av| 野外毛多少妇大战A片| 免费啪啪社区免费啪啪| 韩漫免费无删减网站| 做受???高潮AAAA图片| 成熟妇人A片免费看网站| 青草娱乐极品免费视频| 天天色影网| 成人国产AV精品 9 2 1 5久久久电 | 老师的小兔子好大好软水好多视频| 欧洲50岁60岁70岁80岁| 精品人妻无码一区二区三区网站|