go值傳遞和地址傳遞的案例-創(chuàng)新互聯(lián)

這篇文章主要介紹了go值傳遞和地址傳遞的案例,具有一定借鑒價(jià)值,需要的朋友可以參考下。希望大家閱讀完這篇文章后大有收獲。下面讓小編帶著大家一起了解一下。

創(chuàng)新互聯(lián)公司專(zhuān)業(yè)為企業(yè)提供淅川網(wǎng)站建設(shè)、淅川做網(wǎng)站、淅川網(wǎng)站設(shè)計(jì)、淅川網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)與制作、淅川企業(yè)網(wǎng)站模板建站服務(wù),十載淅川做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。

                                                       

先來(lái)看個(gè)簡(jiǎn)單的例子

1、變量前面加個(gè)&表示這個(gè)變量的地址(也就是這個(gè)變量的指針),指針變量前面加*表示這個(gè)指針對(duì)應(yīng)的值 (自己理解下)

//main.gopackage main
func ByAss() {
  s := 100
  p := &s  // s 的地址給了p

  fmt.Println(*p) //100 所以p對(duì)應(yīng)的值變成了100
  *p += 100
  fmt.Println(*p)  //200
  fmt.Println(s) //200 p和s相同的地址,所以s也變成200}//demo.gopackage main
func main() {
  ByAss()}

Go 默認(rèn)使用按值傳遞來(lái)傳遞參數(shù),也就是傳遞參數(shù)的副本。函數(shù)接收參數(shù)副本之后,在使用變量的過(guò)程中可能對(duì)副本的值進(jìn)行更改,但不會(huì)影響到原來(lái)的變量,比如 Function(arg1)。

2、普通值傳遞 (注意這個(gè)例子,看起來(lái)很簡(jiǎn)單,但是容易忽略)

func ByValue1(n1 int) {
  //此時(shí)n1 是n 的一個(gè)拷貝,所以地址不一樣
  fmt.Println(&n1)//0xc00000a098}package main
func main() {
  n := 100
  fmt.Println(&n) //0xc00000a090
  ByValue1(n)//傳遞副本}

如果你希望函數(shù)可以直接修改參數(shù)的值,而不是對(duì)參數(shù)的副本進(jìn)行操作,你需要將參數(shù)的地址(變量名前面添加 & 符號(hào),比如 &variable)傳遞給函數(shù),這就是按引用傳遞,比如 Function(&arg1),此時(shí)傳遞給函數(shù)的是一個(gè)指針。

3、如果想用地址傳遞

func main() {
    n := 100
    fmt.Println(&n) //0xc00000a090
    ByReference(&n) //傳遞指針
    fmt.Println(n) //200}//注意函數(shù) 參數(shù)類(lèi)型需要是用指針?lè)?hào)(*)func ByReference(n1 *int) {

   *n1 += 100
   fmt.Println(n1)//0xc00000a090 地址與n相同, 所以n值被改變了
  //注意
  //ip := &n1//這個(gè)寫(xiě)法有問(wèn)題,表示地址的地址
  //fmt.Println(ip)}

4、看下數(shù)組

  • (a)數(shù)組也是值傳遞
    arr := [5]int{1,3,5,6,7}arrByValue(&arr) //也需要使用& 符號(hào)fmt.Println(arr) //[100 300 5 6 7]func arrByValue(arr1 *[5]int) {
     arr2 := arr1
     arr2[0] = 100
     arr2[1] = 300}

5、下面是切片的例子 (可變的數(shù)組)切片是引用傳遞

func main() {
    arr := []int{1,3,5,6,7}
    bbb(arr) //沒(méi)有使用& 符號(hào)
    fmt.Print(arr[0])// 11 結(jié)果已經(jīng)改變,說(shuō)明數(shù)組是地址傳遞

    //就算不通過(guò)函數(shù),也是引用傳遞
    //arr := []int{1,3,5,6,7}
    //arr2 := arr
    //arr2[1] = 0
    //fmt.Print(arr)//[1 0 5 6 7]}//aaafunc bbb(arr1 []int) {
   arr1[0] += 10}
  • (b)在函數(shù)調(diào)用時(shí),像切片(slice)、字典(map)、接口(interface)、通道(channel)這樣的引用類(lèi)型都是默認(rèn)使用引用傳遞(即使沒(méi)有顯式的指出指針)。

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享go值傳遞和地址傳遞的案例內(nèi)容對(duì)大家有幫助,同時(shí)也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)網(wǎng)站制作公司行業(yè)資訊頻道,遇到問(wèn)題就找創(chuàng)新互聯(lián),詳細(xì)的解決方法等著你來(lái)學(xué)習(xí)!

網(wǎng)頁(yè)標(biāo)題:go值傳遞和地址傳遞的案例-創(chuàng)新互聯(lián)
路徑分享:http://muchs.cn/article2/dshhic.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站建設(shè)、網(wǎng)站內(nèi)鏈、動(dòng)態(tài)網(wǎng)站、用戶體驗(yàn)、企業(yè)網(wǎng)站制作、面包屑導(dǎo)航

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)