zoukankan      html  css  js  c++  java
  • 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
    ",d)
        var f4 = func(d []int) {
            d = append(d, 2) //会改变c的地址
            fmt.Printf("地址p = %p
    ",d)
        }
        f4(d)
        fmt.Println(d)
    
    }

     博客:

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

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

    I can see a bigger world.
  • 相关阅读:
    SysRq组合键是一组"魔术组合键"
    iptables FTP脚本
    (转)SSH的端口转发
    进制转换
    指定的参数已超出有效值的范围
    静态类
    接口
    快捷键,移到最上层
    gitbook
    nginx服务无法停止(Windows)
  • 原文地址:https://www.cnblogs.com/xuweiqiang/p/15155993.html
Copyright © 2011-2022 走看看