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的逃逸分析(方法内创建的对象,被方法外使用,无法收回。),传值优于传指针。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,142评论 1 32
  • 第2章 基本语法 2.1 概述 基本句法和变量 语句 JavaScript程序的执行单位为行(line),也就是一...
    悟名先生阅读 4,198评论 0 13
  • 没有记录,就没有发生!(本周关键词:线上分享沙龙 天使班毕业典礼和线下聚会 ) 【李娜90天践行目标】0312-0...
    李娜_7f54阅读 190评论 0 0
  • 首先,当你点开这篇文章,你有很大可能是有拖延症的。 不过不用慌,看完这篇文章,请你关闭其他无用的娱乐软件,开始做正...
    璎泠阅读 722评论 0 0
  • 人生可以失败,但必须败得漂亮 标签(空格分隔): 文摘 他们结婚三年,没有孩子,是大家公认的模范夫妻,脸红吵架都是...
    袁俊亮技术博客阅读 350评论 0 0