go指针传递和值传递

在函数传参的时候,见有人用指针传,如下:

type struct Info{
      Msg string `json:"msg"`
}
function test(info *Info){
        ...
        return
}

就想着为什么非要传指针呢,你要Info,直接写在函数返回值里不也可在函数间传递吗?

type struct Info{
      Msg string `json:"msg"`
}
function test(info Info) Info{
      ...
      return info
}

后来,总结了几点传指针和传值的情况,如下:

一 、传指针

1、要修改变量的值,供函数之后使用,用指针。如

type struct Info{
    Msg string `json:"msg"`
}
function test1(info *Info){
    ...
    return
}
function test2(info *Info){
    ...
    return
}
function test(){
    info:=&Info{}
    test1(info)
    test2(info)
    fmt.Println(info)
    return
}

2、变量是个大的结构,用指针

传值复制大的结构,影响性能

二、传值

1、map 和slice 本身是引用类型,传值就可以了。

2、内存分配性能上,传值可简化go的逃逸分析(方法内创建的对象,被方法外使用,无法收回。),传值优于传指针。

你可能感兴趣的:(go指针传递和值传递)