Go 引用一直是我比较让疑惑的话题,尝试来聊聊它,可行呢?

之前,我一直都有些混乱,非常想整理下这个问题。我相信,除了我,还有很多人在这一块也有很多疑问。

提一些简单的问题。比如下面这些:

什么是引用呢?

引用和指针有什么区别?

Go 语言中有没有引用类型吗?

值传递、址传递和引用传递分别是什么?

是不是感觉到这是一个非常令人头疼的话题。学了那么多语言,但没有深入总结,或许就会导致这样的思维混乱。

前言

我认为,明明白白地理解引用,可分别从类型和传递思考。

类型角度的话,类型可分为值类型和引用类型,一般而言,我们说到引用,强调的都是类型。

传递角度的话,有值传递、址传递和引用传递,传递是在函数调用时才会提到的概念,用于表明实参与形参的关系。

引用类型和引用传递的关系,尝试一句话概括,引用类型不一定是引用传递,但引用传递的一定是引用类型。

简单的几句话,是在使用各种语言后总结出来的,希望无误吧,毕竟不能误导他人。

是什么

谈引用,不得不提指针,指针与引用是编程学习中老生常谈的话题了。有些编程语言为了降低程序员的使用门槛,只有引用。而有些语言是指针引用皆存在,如 C++ 和 Go。

指针,表示地址的意思。

程序运行的时候,操作系统会为每个变量分配一块内存放数据内容,而这块内存有一个编号,即内存地址,也就是变量的地址。现在 CPU 一般都是 64 位,因而,这个地址的长度一般也就是 8 个字节。

引用,某块内存的别名。

一般情况,都会这么解释引用。换句话说,引用代指某个内存地址,这句话真的是非常简洁,同时也非常好理解。但在 Go 中,这句话看起来并不全面,具体后面解释。

除了指针和引用,还有另外一个更广泛的概念,值。谈变量传递时,常会提到值传递、址传递和引用传递。从广义上看,对大部分的语言而言,指针和引用都属于值。而从狭义角度来说,则可分为值、址和引用。

脑壳疼啊?香菇,难受。感觉到自己头发在掉了。

其实,如果要想彻底搞清楚这些概念,得从本质出发啊。

值和指针

先来搞明白值与指针区别。

上一节在介绍指针的时候,提到了要注意变量的地址和内容的不同。为什么要说这句话呢?

假设,我们定义一个 int 类型的变量 a,如下:

var a int = 1

变量 a 的内容为 1,而变量内容是存在某个地址之中的。如何获取变量地址呢?Go 中获取变量地址的方法与 C/C++ 相同。代码如下:

var p = &a

通过 & 获取 a 的地址。同时,这里还定义了一个新的变量 p 用于保存变量 a 的地址。p 的类型为 int 指针,也就是变量 p 中的内容是变量 a 的地址。

如下代码输出它们的地址:

var a = 1var p = &afmt.Printf("%p

php中怎么引用js变量_理解下 Go 中的引用是怎么回事相关推荐

  1. 【C 语言】指针间接赋值 ( 直接修改 和 间接修改 指针变量 的值 | 在函数中 间接修改 指针变量 的值 | 在函数中 间接修改 外部变量 的原理 )

    文章目录 一.直接修改 和 间接修改 指针变量 的值 二.在函数中 间接修改 指针变量 的值 三.在函数中 间接修改 外部变量 的原理 一.直接修改 和 间接修改 指针变量 的值 直接修改 指针变量 ...

  2. 育儿-《10-14岁青少年,你在想什么?》书中的精髓:父母如何理解青少年潜意识中的冲突和需求,陪伴他们共度青春期?

    <10-14岁青少年,你在想什么?>书中的精髓:父母如何理解青少年潜意识中的冲突和需求,陪伴他们共度青春期? 几乎每个家长都有过这个疑问:怎样才能培养孩子?其实养孩子就像是养花,最重要的是 ...

  3. 子类重写父类变量_为什么在子类中不重写超类的实例变量

    子类重写父类变量 当我们在父类和子类中创建一个具有相同名称的变量,并尝试使用持有子类对象的父类引用访问它时,我们会得到什么? 为了理解这一点,让我们考虑下面的示例,在该示例中,我们在Parent和Ch ...

  4. python中var是什么变量_一、 Python概述、变量

    一.        Python概述 1.python是一门面向对象,解释型的脚本语言.语法简洁,编写效率高,但是执行(底层运行)效率低(总的来说解释语言执行效率低于编译语言). 注意:本博客所有的代 ...

  5. xml文件 卷积神经网络_理解卷积神经网络中的输入与输出形状(Keras实现)

    即使我们从理论上理解了卷积神经网络,在实际进行将数据拟合到网络时,很多人仍然对其网络的输入和输出形状(shape)感到困惑.本文章将帮助你理解卷积神经网络的输入和输出形状. 让我们看看一个例子.CNN ...

  6. python中list函数中variables变量_如何在Python中使用变量,浅谈,Pytorch,的,Variable,方法...

    Variable的基本概念 autograd.Variable 是包的核心类.它包装了张量,并且支持几乎所有的操作.一旦你完成了你的计算, 就可以调用 .backward() 方法 来 自动计算所有的 ...

  7. swift 引用其他类_浅谈swift中闭包修饰符 weak?unowned? 或什么都不用

    浅谈swift中闭包修饰符 weak?unowned? 或什么都不用 平常的开发中,clourse是我们iOSr绕不过去的坎儿. 苹果本身也很重视闭包,像之前的一些老的target-action类型的 ...

  8. python设置环境变量_小白Python进行中

    一.安装 安装包的下载 在官网进行下载,我选用Python3.8.0. Welcome to Python.org​www.python.org 安装 安装的时候可以借鉴该视频. Windows 10 ...

  9. java中的最终变量_在lambda表达式中使用的变量应该是最终变量或有效的最终变量。...

    A final变量意味着它只能被实例化一次.在Java中,您不能在lambda和匿名内部类中使用非最终变量. 您可以使用旧的for-each循环重构代码:private TimeZone extrac ...

  10. activiti 变量_如何在Activiti中使用瞬态变量

    activiti 变量 我们昨天发布的Activiti v6 Beta3中已经加入了很多需要的功能-临时变量. 在这篇文章中,我将向您展示一个示例,说明如何使用瞬态变量来覆盖一些以前不可能(或最佳)的 ...

最新文章

  1. 基于深度学习的位姿估计方法
  2. 《Effective C++》读书笔记(第一部分)
  3. (Sql Server)SQL FOR XML PATH
  4. 【转载】(EM算法)The EM Algorithm
  5. Java组合实体模式~
  6. *【CodeForces - 1047A】Little C Loves 3 I (水题,构造,三元组问题)
  7. 英文书《用unreal来学习c++》_用机器学习来概括《哈利波特》,四句话总结一场戏...
  8. 搭建负载均衡器nginx_为什么要使用NGINX作为负载均衡器?
  9. 美团起飞了?上半年营收418.76亿 同比增长58.9%
  10. 约瑟夫环 C语言 单循环链表
  11. [工具][转载] ExtractData 1.08更新
  12. 将Subversion(SVN)日志记录导出到excel表格(理论windows和Linux通用)
  13. Nginx的软件架构
  14. MIMO 从入门到精通 -科普篇2 - MIMO and Beamforming
  15. 交互设计师需要具备什么样的专业能力
  16. java 每日一练——英雄怪兽文字攻击实例(每步都有解释)
  17. 分布式一致性算法 - raft 图解
  18. 一切都结束了,祝贺曼联夺得联赛冠军
  19. 我收集的优秀Flash站点
  20. 计算机与网络连接需要什么设置,如何设置宽带连接,详细教您如何设置宽带连接...

热门文章

  1. 图像语义分割(4)-SegNet:深度全卷积编解码结构
  2. Otsu算法原理及实现
  3. nginx限制并发连接数和连接请求数
  4. Java JDK动态代理Proxy类的原理是什么? - 知乎(重排版)
  5. Hadoop yarn配置参数
  6. sync Command in Unix
  7. OBS( Open Broadcaster Software )录制视频黑屏问题录制方法
  8. Arcgis 如何将大量数据转换成csv导出
  9. IDL| 数据分割读取
  10. HTML学习总结(3)——标签a/head/style/img