slice是go中的乙個基本操作
本文主要演示切片傳參對自身的影響
ubuntu19.10
idea goland
go version 1.14.0
##簡介
type sliceheader struct
切片可以自動擴容
len的值總是小於等於cap,且都大於等於零
data 可能會變
func
main()
// 沒有發生擴容且傳入指標
func
slicea
(a [
]int)[
]int
輸出結果如下:
fun return
0xc000020050
new value a =[0
1000
0000
0]oldp =
0xc000020050
old value a =[0
1000
0000
0]
上述初始化了乙個int切片,長度為10,容量為10!
分析(敲黑板,劃重點):
這裡上述傳入的切片其實我們反覆的操作都是對同乙個切片修改,看列印的指標就知道了我們再對同乙個記憶體位址的東西操作。
原因:
golang中是值傳遞:這裡的值傳遞不是說引數給了乙個指標,
會自動獲取指標指向的value進行操作,你傳的是指標,那麼函式引數的值就是指標。
再將切片傳參時,其實傳遞的是指標。所以我們在函式內部操作的其實是同乙個切片
** 如果你認為切片傳遞的值不會改變,那肯定是不了解切片是怎麼擴容的我們下面繼續看**
func
main()
func
sliceb
(b [
]int)[
]int
輸出結果:
slice b =
0xc000020050
new value a =[0
1000
0000
0]fun return
0xc000118000
new value a =[0
1000
0000
01]
同樣初始化乙個int切片,長度10,容量10!
前後兩個切片值不同,指標不一樣,這裡切片追加了乙個 int(1) ,
長度超出了容量,所以發生了擴容,
這時候發生了重新申請空間的情況導致此時系統中存在兩個切片。
這時候切片b當然就和返回值 切片return不一樣了
感興趣的同學可以輸出一下現在切片的容量是多少??????
當切片傳參時,是以指標的形式傳遞的
當切片a擴容時,就回產生新的切片,即使重新賦值,切片a也不再是切片a了
vue傳參,元件之間傳參 路由傳參 vuex
詳見 兩種情況 params 和 query 都可以在目標元件的生命週期裡,通過 this.route 進行獲取 例 首頁中精選主題的路由傳參 精選主題 1 簡單舉例 a 一般會新建 store 資料夾,在 index.js 初始化 vuex b 在 main.js 中,引入 c 例如,在我的頁面修...
params傳參和query傳參
params傳參 this.router.push query傳參 this.router.push 1 用法上的 query要用path來引入,params要用name來引入,接收引數都是類似的,分別是this.route.query.name和this.route.params.name。注意接...
params傳參和query傳參
當你使用params方法傳參的時候,要在路由後面加引數名,並且傳參的時候,引數名要跟路由後面設定的引數名對應。使用query方法,就沒有這種限制,直接在跳轉裡面用就可以。注意 如果路由上面不寫引數,也是可以傳過去的,但不會在url上面顯示出你的引數,並且當你跳到別的頁面或者重新整理頁面的時候引數會丟...