Golang的值傳遞和引用傳遞


其實和js一樣,主要看是基本數據類型還是引用數據類型

基本數據類型值傳遞。引用數據類型引用傳遞

但是

package main

import "fmt"

func main() {
    a := 1
    var f1 = func(a int) {
        a += 1
    }
    f1(a)
    fmt.Println(a) // 值傳遞 1還是1 不會變2 
    
    b := map[string]string{
        "name":"jack",
    }
    var f2 = func(a map[string]string) {
        a["name"] = "rose"
    }
    f2(b)
    fmt.Println(b) // 引用傳遞 - jack會變成rose
}

但是slice又不太一樣,append會變更地址相當於值傳遞,而沒有append的時候又是引用傳遞

package main

import "fmt"

func main() {
    c := []int{1}
    var f3 = func(c []int) {
        c[0] = 3 //不會改變c的地址 - 將會變成引用傳遞

    }
    f3(c)
    fmt.Println(c)

    d := []int{1}
    fmt.Printf("地址p =  %p\n",d)
    var f4 = func(d []int) {
        d = append(d, 2) //會改變c的地址
        fmt.Printf("地址p = %p\n",d)
    }
    f4(d)
    fmt.Println(d)

}

 

 博客:

https://zhuanlan.zhihu.com/p/366908019

https://www.cnblogs.com/wang_yb/p/12126884.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM