日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

append生成新变量的时候,没有如预期(It's a feature,not a bug?)

發(fā)布時間:2025/3/8 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 append生成新变量的时候,没有如预期(It's a feature,not a bug?) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

這是我在寫一個項目中,遇到的一個golang的feature,如代碼所示,我在for循環(huán)里,每次用append生成一個新的數組,(當然我以前一直以為可以這樣,直到我在stackoverflow上發(fā)現不能。)然后將這個數組追加到一個大數組里(二維數組),這時候發(fā)現并不如預期那樣,似乎每次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

總結

以上是生活随笔為你收集整理的append生成新变量的时候,没有如预期(It's a feature,not a bug?)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。