go 切片傳參分析

2021-10-08 16:24:51 字數 1528 閱讀 9522

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上面顯示出你的引數,並且當你跳到別的頁面或者重新整理頁面的時候引數會丟...