對GO切片的無知,我所踩下的坑

2021-10-07 08:33:35 字數 1013 閱讀 6233

從切片中刪除指定元素

廢話不多說直接上**

package main

import

("fmt"

)var datas [

]int

var filter int

func

init()

func

main()

// 從recordeddatas 刪除filter中的指定的元素

func

filterdata

(recordeddatas [

]int

, filter int)}

}

輸出

datas: [22 33 44 44]
輸出結果應該是這樣的才對啊:

res: [33 44]
切片型別作為引用型別,引用型別在函式間的傳遞的是變數的位址,然而這個位址其實也是乙個值。

所以函式中的recordeddatas引數和全域性變數datas指向了同乙個底層陣列

recordeddatas =

(recordeddatas[

:i], recordeddatas[i+1:

]...

)

這段**的意圖就是想每一次迴圈就將filter中的指定元素從recordeddatas中刪除,

問題就出現在該**中:

當迴圈第一次進入到該**中時上述**可以替換為

recordeddatas =

(recordeddatas[:0

], recordeddatas[0+

1:]...

)

recordeddatas = [22 33 44]

下圖debug為證:

我所遇見的坑(一)

class father class children 真正的 要比這個複雜,例項化是巨集來呼叫的,所以我看了老半天,還是找不到 出錯了。因為用的codeblock,編譯過程中輸出的都是英文,沒有仔細看。後來看了vs編譯,發現有提示哪個虛函式沒有實現,這才想到看codeblock編譯輸出的結果。這是...

關於Go的可變引數的使用 我踩的坑

package main import log func main func print str string,s inte ce 自己寫了乙個print函式,想通過傳遞多個引數,print接收之後列印,但是結果如下 顯然沒有符合預期,本來想依次列印1,2,3,4,5 結果第乙個 d講整個inte ...

Java的序列化和反序列化,我所遇到的坑

有時需要為物件做持久化,就是把記憶體裡的物件儲存到磁碟 暫且叫做磁碟吧,可以等同於sp db 檔案 網路等 上,等以後需要這個物件的時候再從磁碟上還原到記憶體,因此需要序列化和反序列化。如果使用objectoutputstream方式序列化,可能出現的坑如下 坑1 類裡面一定要serialversi...