type Box struct {
color Color
}
func (b *Box) SetColor(c Color) {
b.color = c
}
func (b Box) SetColor(c Color){
b.color = c
}
现在让我们回过头来看看SetColor这个method,它的receiver是一个指向Box的指针,是的,你可以使用*Box。想想为啥要使用指针而不是Box本身呢?
我们定义SetColor的真正目的是想改变这个Box的颜色,如果不传Box的指针,那么SetColor接受的其实是Box的一个copy,也就是说method内对于颜色值的修改,其实只作用于Box的copy,而不是真正的Box。所以我们需要传入指针。
这里可以把receiver当作method的第一个参数来看,然后结合前面函数讲解的传值和传引用就不难理解
这里你也许会问了那SetColor函数里面应该这样定义*b.Color=c,而不是b.Color=c,因为我们需要读取到指针相应的值。
你是对的,其实Go里面这两种方式都是正确的,当你用指针去访问相应的字段时(虽然指针没有任何的字段),Go知道你要通过指针去获取这个值,看到了吧,Go的设计是不是越来越吸引你了。
也许细心的读者会问这样的问题,PaintItBlack里面调用SetColor的时候是不是应该写成(&bl[i]).SetColor(BLACK),因为SetColor的receiver是*Box,而不是Box。
你又说对的,这两种方式都可以,因为Go知道receiver是指针,他自动帮你转了。
也就是说:
如果一个method的receiver是*T,你可以在一个T类型的实例变量V上面调用这个method,而不需要&V去调用这个method
类似的
如果一个method的receiver是T,你可以在一个*T类型的变量P上面调用这个method,而不需要 *P去调用这个method
http://www.kancloud.cn/kancloud/web-application-with-golang/44154
分享到:
相关推荐
在Golang中,方法是与特定类型关联的函数,接收者(receiver)是方法的第一个参数,它可以是该类型的实例或其指针。接收者类型决定了方法的行为,特别是当涉及到值的复制和对对象的直接修改时。本文将深入探讨接收者...
Citrix Receiver是一款由Citrix公司开发的远程桌面访问软件,它允许用户从任何地方通过互联网安全地访问企业内部的应用程序和资源。Receiver卸载过程有时可能会遇到问题,尤其是在多版本交替使用或尝试重新安装时,...
【Sender/Receiver 消息】在Java消息服务(JMS)中,Sender和Receiver是两个基本的概念,它们分别代表消息的生产者和消费者。Sender负责创建并发送消息,而Receiver则负责接收和处理这些消息。在JMS中,消息传递是...
删除 Citrix Receiver for Windows 您可以使用 Windows 的“程序和功能”实用工具(添加/删除程序)卸载 Receiver。 注意:如果曾使用 Citrix Receiver Updater 安装 Receiver,请勿使用此方法。 在某些情况下,卸载...
运行这个文件之前,建议先备份重要数据,因为清理过程是不可逆的,会彻底删除与Citrix Receiver有关的信息。执行该工具时,它会引导用户完成一系列步骤,包括选择清理模式(如完全清理或保留某些设置)以及确认操作...
"Trap"是SNMP中的一个重要概念,它是一种从网络设备向网络管理系统发送的被动通知,通常发生在设备状态变化或出现异常情况时。Trap接收器则是用于接收这些陷阱通知的组件。 "Trap Receiver (Trap模拟接收器)"是...
Citrix Receiver的工作原理是这样的:首先,它在用户的设备上创建一个本地接口,然后通过安全的协议(如ICA,Independent Computing Architecture)与Citrix XenApp或XenDesktop服务器建立连接。一旦连接建立,用户...
"CitrixReceiver卸载工具"是专门针对这款软件设计的一个实用程序,旨在帮助用户简便快捷地从他们的计算机上卸载CitrixReceiver。 在Windows操作系统中,常规的卸载方式可能无法完全移除CitrixReceiver,因为一些...
"Receiver高效uninstall工具"是针对Citrix Receiver的一个专用卸载工具,旨在帮助用户或系统管理员更方便、更高效地移除Citrix Receiver程序。 通常情况下,卸载Citrix Receiver可能涉及多个步骤,包括清除残留的...
标题 "pc Receiver2.0.3" 暗示我们关注的是一个针对个人电脑的无线游戏接收器的更新版本,具体为2.0.3。这个接收器的主要功能是允许用户通过USB接口将Xbox 360的无线控制器与PC连接,实现电脑上的游戏操作。"User's ...
Citrix Receiver是一款由Citrix公司开发的远程桌面访问软件,它允许用户通过各种设备安全地访问企业级应用程序和数据。然而,在使用过程中,有时可能会遇到一些问题,如“此版本Citrix Receiver不支持所选加密级别”...
【Dream DRM Receiver】是一款专为数字广播爱好者设计的软件,它实现了Mondiale标准的数字广播接收功能。这款软件的强大之处在于,用户只需要拥有一台配备了声卡的计算机,就能将其转化为一个功能全面的中波(MW)、...
在Android应用开发中,BroadcastReceiver是一种非常重要的组件,它允许应用程序在不直接交互的情况下接收和响应系统或自定义广播事件。本教程将深入探讨如何利用BroadcastReceiver在两个不同的Activity之间传递数据...
2. **易用性**:安装文件"CitrixReceiver_4.12.exe"表明这是一个Windows平台的安装程序,用户只需运行该程序,按照向导进行简单几步操作,即可完成Receiver的安装。 3. **安全连接**:Citrix Receiver 使用先进的...
CitrixReceiver.dmg
EventReceiver注册工具就是这样一个实用程序,它帮助开发者便捷地将事件接收器的DLL文件与SharePoint的应用程序集(Assembly)关联起来。 标题"EventReceiver注册工具EventReceiver注册工具"明确指出,这个工具是...
citrix receiver for mac
Citrix Receiver是一款由Citrix公司开发的远程桌面访问软件,它允许用户从各种设备上访问企业内部的应用程序和数据。然而,在某些情况下,用户可能需要卸载Receiver,但常规的卸载方法可能会遇到问题,例如残留文件...
在Android系统中,`Manifest` 文件是每个应用的核心配置文件,它包含了应用的组件(如Activity、Service、BroadcastReceiver)以及它们的相关权限等信息。在标题"在运行时管理Manifest Receiver"中,我们关注的是...
Qt是一个跨平台的应用程序开发框架,它的使用使得Dream DRM Receiver能在不同的操作系统上无缝运行。QtNetwork4.dll负责处理网络连接,确保广播数据的稳定接收;QtOpenGL4.dll则用于图形渲染,提供流畅的视觉体验。 ...