append生成新變量的時候,沒有如預期(It's a feature,not a bug?)

這是我在寫一個項目中,遇到的一個golang的feature,如代碼所示,我在for循環里,每次用append生成一個新的數組,(當然我以前一直以為可以這樣,直到我在stackoverflow上發現不能。)然后將這個數組追加到一個大數組里(二維數組),這時候發現并不如預期那樣,似乎每次append沒有返回新數組,然而,當我把一開始生成的5修改為2的時候,卻是正常的,如果都不正常也好理解,有時正常有時不正常的行為難以琢磨,請懂go底層實現的大牛牛們解釋一下為啥會這樣呢?
stackoverflow上類似的問題是:

http://stackoverflow.com/ques...

基本上和我的差不多,最后我也是使用答案中建議的方式copy來解決的。

package mainimport ("fmt"
)func main() {arr := make([]int, 0)for i := 0; i < 5; i++ { // 如果將此處的 5 修改為 2,可以看到 [0 1 0] [0 1 1] 運行如預期arr = append(arr, i)}var list [][]intfor _, v := range arr {vi := append(arr, v)fmt.Println(vi)/** 注意此處的vi依次為*     [0 1 2 3 4 0]*    [0 1 2 3 4 1]*    [0 1 2 3 4 2]*    [0 1 2 3 4 3]*    [0 1 2 3 4 4]*/// 但是追加進去后,末尾的最后一位全部變成了4list = append(list, vi)}fmt.Println(list)// 最后的list 卻為:/*** [*    [0 1 2 3 4 4]*    [0 1 2 3 4 4]*    [0 1 2 3 4 4]*    [0 1 2 3 4 4]*    [0 1 2 3 4 4] ]** 看起來,似乎go在底層每次使用的是同一個vi,并且vi最后被修改成了最后一次的值4. 鵝妹子嚶!**/
}

運行結果地址:

https://wide.b3log.org/playgr...

將5修改為2后:

https://wide.b3log.org/playgr...


append生成新變量的時候,沒有如預期(It's a feature,not a bug?) >> golang

這個答案描述的挺清楚的:
http://www.goodpm.net/postreply/golang/1010000008897291/append生成新變量的時候沒有如預期Itsafeaturenotabug.html

轉載于:https://www.cnblogs.com/scrumme/p/6978385.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/541233.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/541233.shtml
英文地址,請注明出處:http://en.pswp.cn/news/541233.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

jqgrid本地數據例子_辦公系統私有云公有云和本地化部署,你選哪個?

隨著互聯網和云計算技術的發展&#xff0c;我們常常會聽到&#xff1a;私有云、公有云和本地化部署&#xff0c;它們分別代表什么意思&#xff1f;無論是國企、民企還是外企&#xff0c;只要有數據&#xff0c;就要思考&#xff1a;到底將數據儲存在哪里&#xff1f;選擇輕流進…

計算機基礎應用的培養活動記錄,小學少年宮計算機興趣小組活動記錄表

小學少年宮計算機興趣小組活動記錄表 小學少年宮計算機興趣小組活動記錄表 活動名稱&#xff1a;計算機 指導教師&#xff1a; ⅩⅩ 學生姓名 活動地點 計算機教室 活 動 過 程 活動1&#xff0e;認識計算機 ①師&#xff1a;“請同學們按下方盒子上面像大鈕扣一樣的按鈕&#…

C ++ STL中的set :: lower_bound()函數

C STL set :: lower_bound()函數 (C STL set::lower_bound() function) set::lower_bound() function is a predefined function, it is used to get the lower bound of any element in a set. set :: lower_bound()函數是預定義的函數&#xff0c;用于獲取集合中任何元素的下…

flume入門

# example.conf: A single-node Flume configuration# Name the components on this agent #給那三個組件取個名字 a1.sources r1 a1.sinks k1 a1.channels c1# Describe/configure the source #類型, 從網絡端口接收數據,在本機啟動, 所以localhost, typespoolDir采集目錄源…

原生js設置div隱藏或者顯示_JavaScript動畫方式控制div元素的隱藏和顯示

jQuery實現此功能相對比較簡單&#xff0c;具體參閱點擊按鈕動畫方式隱藏和顯示div一章節。結合CSS3實現此功能也非常便利和適合&#xff0c;具體參閱JavaScript與CSS3動畫方式改變元素尺寸一章節。原生JavaScript實現稍顯麻煩&#xff0c;下面就通過代碼實例介紹一下如何實現此…

python線程任務run_Python線程類| 帶有示例的run()方法

python線程任務runPython Thread.run()方法 (Python Thread.run() Method) Thread.run() method is an inbuilt method of the Thread class of the threading module in Python. This method is used to represent a threads activity. It calls the method expressed as the …

哪個計算機無法做到雙屏顯示,怎么啟用雙屏顯示設置【圖文介紹】

隨著生活質量的提升&#xff0c;人們對于便利的要求越來越高&#xff0c;電腦的雙屏顯示成為現在用戶越來越關注的對象之一。比如炒股操作中&#xff0c;人們既要關注大盤的走動趨勢&#xff0c;又要關注特定股票的走勢&#xff0c;在普通的屏幕上就需要不斷地切換頁面&#xf…

1.django 開發環境搭建

2019獨角獸企業重金招聘Python工程師標準>>> 本教程使用的開發環境 本教程寫作時開發環境的系統平臺為 Windows 10 &#xff08;64 位&#xff09;&#xff0c;Python 版本為 3.5.2 &#xff08;64 位&#xff09;&#xff0c;Django 版本為 1.10.6。 建議盡可能地與…

改jpg_|我來改第04期|—人物海報設計

【我來改第04期】人物海報文案內容-Ad copyhttps://pan.baidu.com/s/16pz9_rcLXTGZ3xzKFjKN9g 密碼: r57t設計要求-Requirement尺寸&#xff1a;1080(高)*650(寬)像素&#xff0c;大小不大于5m設計要求&#xff1a;以目前的藍色為主要顏色(R:47,G:87,B:130)&#xff0c;畫面體…

Java即時類| plus()方法與示例

即時類plus()方法 (Instant Class plus() method) Syntax: 句法&#xff1a; public Instant plus(TemporalAmount t_amt);public Instant plus(long amt, TemporalUnit t_unit);plus() method is available in java.time package. plus()方法在java.time包中可用。 plus(Temp…

計算機領域中dns是什么意思,dns錯誤是什么意思?dns錯誤要如何解決?

隨著網絡的普及&#xff0c;電腦已經成為我們生活中必不可少的物品&#xff0c;它可以幫助我們工作和學習以及娛樂。不過電腦在使用的過程中&#xff0c;常常會出現一些問題&#xff0c;小編覺得最常見也最讓人心生煩躁的就是輸入網址打開之后出現網頁打不開&#xff0c;提示dn…

Launch Instruments

Launch Instruments 該儀器應用在Xcode應用程序&#xff0c;所以推出是在Xcode的最直接的方式。你也可以啟動它間接地通過碼頭&#xff0c;啟動&#xff0c;或命令行。The Instruments app lives inside the Xcode app, so the most direct way to launch it is from within Xc…

java clock計時_Java Clock類| offset()方法與示例

java clock計時Clock Class offset()方法 (Clock Class offset() method) offset() method is available in java.time package. offset()方法在java.time包中可用。 offset() method is used to generate a new Clock from the given base clock with added the given Duratio…

dataframe數據標準化處理_數據處理中的標準化、歸一化究竟是什么?

關注上方“Python數據科學”&#xff0c;選擇星標&#xff0c;精彩文章不會錯過&#xff01;今天說一個比較重要的內容&#xff0c;無論是在算法建模還是在數據分析都比較常見&#xff1a;數據歸一化和標準化。開始之前&#xff0c;請你先把網上看到的所有相關的博客、帖子都忘…

北航計算機學院博士機試考試題,北航2015考博真題回憶及全套資料 - 考博 - 小木蟲 - 學術 科研 互動社區...

我是2015年畢業的應屆碩士&#xff0c;報考了北航經管院的博士。想寫這篇文很久了&#xff0c;現在復試完等最后結果中&#xff0c;把自己一路走來的經驗分享給大家。1.報名報名之前很重要的一點就是聯系導師。我是研二下&#xff0c;快放暑假了才開始聯系導師。北航一般是11月…

用了Redis里面的map和set

map的操作用 hset&#xff0c;hget等 set的操作有 sadd sismember等 參考下面&#xff1a; http://blog.csdn.net/kwsy2008/article/details/48467441

java輸出不同顏色_Java設計模式-策略模式、狀態模式

推薦閱讀&#xff1a;一只Tom貓&#xff1a;都是“Redis惹的禍”&#xff0c;害我差點掛在美團三面&#xff0c;真是“虛驚一場”&#xff01;java喵&#xff1a;6大面試技能樹&#xff1a;JAVA基礎JVM算法數據庫計算機網絡操作系統前言當代碼中出現多重if-else語句或者switch語…

c++stl和std_std :: rotate()函數以及C ++ STL中的示例

cstl和stdC STL std :: rotate()函數 (C STL std::rotate() function) rotate() function is a library function of algorithm header, it is used to rotate left the elements of a sequence within a given range, it accepts the range (start, end) and a middle point,…

計算機硬盤正在工作應特別注意避免,初級計算機考試題庫

計算機的初級基本*作包括基本信息欄、計算機的基礎知識、五筆字型基礎、*互聯網的*作、常用辦公外設的使用、計算機硬件的日常維護與保養和office辦公工具的應用。下面是初級計算機考試題庫&#xff0c;請參考&#xff01;1.以下與信息有關的設備計算中&#xff0c;用于存儲信息…

abap 添加alv上的工具欄的按鈕_神器必會!“世界上最好的編輯器Source Insight”...

前言“Source Insight(以下簡稱SI)是世界上最好的編輯器”&#xff0c;說這句話不知道會不會出門被打呢&#xff1f;-_- 中國古話說得好&#xff0c;“文無第一&#xff0c;武無第二”&#xff0c;所以不敢說SI是最好的&#xff0c;但是說是“最好的之一”絕對是妥妥的。它以豐…