go中值传递和引用传递的区别

1. 数据传递本质

 

  • 值传递:
    • 在值传递过程中,函数会创建参数的一个副本,并将副本传递给函数。这意味着函数内部对参数的操作是在这个副本上进行的,并不会影响到原始数据。
    • 例如,当传递一个整数、字符串或结构体等基本类型或复合类型的值给函数时,函数接收到的是该值的一份拷贝。
  • 引用传递:
    • 引用传递并非 Go 语言中函数参数传递的默认方式(Go 语言没有像 C++ 那样的引用传递语法),但可以通过指针来实现类似的效果。
    • 当使用指针传递参数时,函数接收的是变量的内存地址,也就是对原始变量的一个引用。函数内部通过这个指针可以直接访问和修改原始变量的值,所以在函数内部对指针所指向的值进行操作会影响到原始数据。

2. 内存使用情况

 

    • 值传递:
      • 由于要创建参数的副本,所以在值传递时会占用额外的内存空间,尤其是对于大型的数据结构,创建副本可能会消耗较多的内存资源。
      • 例如,如果传递一个包含大量元素的数组作为值传递,那么函数会在内存中另外开辟一块空间来存储这个数组的副本。
    • 引用传递(通过指针):
      • 传递指针只需要传递变量的内存地址,通常地址的大小是固定的(在 64 位系统中一般为 8 字节),相较于传递大型数据结构的副本,占用的内存空间要少得多。
      • 例如,不管是指向一个整数还是一个大型结构体的指针,传递时占用的内存基本就是指针本身的大小,而不是整个被指向数据结构的大小。
posted @   仁义礼智信的  阅读(20)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
历史上的今天:
2023-11-29 PHP性能分析工具
2023-11-29 PHP运行流程
2018-11-29 天气接口
点击右上角即可分享
微信分享提示