首页 > 其他 > 详细

Golang的值传递和引用传递

时间:2021-08-18 15:21:40      阅读:27      评论:0      收藏:0      [点我收藏+]

其实和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

 

Golang的值传递和引用传递

原文:https://www.cnblogs.com/xuweiqiang/p/15155993.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!