自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Go語言的中的For循環(huán)之大坑

開發(fā) 后端
For循環(huán)在我們?nèi)粘>幋a中可能用的很多。在很多業(yè)務(wù)場景中我們都需要用for循環(huán)處理。但golang中的for循環(huán)有一個大大大的坑,大家可否遇到。

 [[279459]]

For循環(huán)在我們?nèi)粘>幋a中可能用的很多。在很多業(yè)務(wù)場景中我們都需要用for循環(huán)處理。但golang中的for循環(huán)有一個大大大的坑,大家可否遇到。直接上代碼:

 

go語言的中的for循環(huán)之大坑

我們寫一個測試類,定義一個切片數(shù)組,然后循環(huán)迭代每個元素,將元素的值放到另一個切片。循環(huán)finalArrays的時候按照我們的預(yù)期應(yīng)該輸出1、2、3、4。但事與愿違,輸出的結(jié)果如下圖:

go語言的中的for循環(huán)之大坑

懵逼了吧!為什么會出現(xiàn)這種奇怪的現(xiàn)象呢?這就是golang的循環(huán)變量的作用域?qū)е碌摹?/p>

在golang的for循環(huán)中,循環(huán)內(nèi)部創(chuàng)建的函數(shù)變量都是共享同一塊內(nèi)存地址,for循環(huán)總是使用同一塊內(nèi)存去接收循環(huán)中的的value變量的值。不管循環(huán)多少次,value的內(nèi)存地址都是相同的。事實確實如此,我們輸出value的內(nèi)存地址看下:

go語言的中的for循環(huán)之大坑

所以,可以看到,整個4次循環(huán)過程中,所有變量值都是在0xc0000b8780這個地址上迭代的。4次循環(huán)都指向的是同一塊內(nèi)存地址,最后一次賦值的操作變量的值是4,指向了這塊內(nèi)存地址,所以前三次的值都變成了4。那我們怎么優(yōu)化呢?我們只需要定義臨時變量。

go語言的中的for循環(huán)之大坑

我們定義一個臨時變量tmp,將value的值賦給tmp,問題就解決了。

評論中很多同學(xué)說,例子不足以說明這個問題,我這里寫一段我們實際業(yè)務(wù)場景的代碼,大家看看。

go語言的中的for循環(huán)之大坑

Bid結(jié)構(gòu)體中的屬性我就不貼圖了。這種情況很多新手同學(xué)會犯,尤其是從java轉(zhuǎn)go的同學(xué)。

責(zé)任編輯:華軒 來源: 今日頭條
相關(guān)推薦

2014-09-01 09:57:11

Go產(chǎn)品環(huán)境最佳語言

2012-10-08 09:25:59

GoGo語言開發(fā)語言

2023-09-25 08:08:56

CAA開發(fā)者團(tuán)隊

2023-12-13 07:19:01

微服務(wù)架構(gòu)Golang

2014-10-31 09:48:36

Go語言

2023-12-30 10:22:57

Go語言函數(shù)開發(fā)

2014-01-14 09:10:53

GoHTTP內(nèi)存泄漏

2024-08-09 10:59:01

KubernetesSidecar模式

2018-07-06 15:04:24

緩存token線程

2021-07-30 07:28:15

WorkerPoolGo語言

2023-12-21 07:09:32

Go語言任務(wù)

2021-04-07 09:02:49

Go 語言變量與常量

2021-04-13 07:58:42

Go語言函數(shù)

2011-01-05 10:58:05

Google Go

2023-06-26 00:03:55

Go語言類型

2013-05-28 09:43:38

GoGo語言并發(fā)模式

2019-02-11 08:32:22

編程語言Go

2021-07-15 23:18:48

Go語言并發(fā)

2022-02-09 16:02:26

Go 語言ArraySlice

2024-04-07 11:33:02

Go逃逸分析
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號