专栏首页章鱼的慢慢技术路Go指南_指针接收者

Go指南_指针接收者

源地址 https://tour.go-zh.org/methods/4

一、描述

你可以为指针接收者声明方法。

这意味着对于某类型 T,接收者的类型可以用 *T 的文法。(此外,T 不能是像 *int 这样的指针。)

例如,这里为 *Vertex 定义了 Scale 方法。

指针接收者的方法可以修改接收者指向的值(就像 Scale 在这做的)。由于方法经常需要修改它的接收者,指针接收者比值接收者更常用。

试着移除第 16 行 Scale 函数声明中的 *,观察此程序的行为如何变化。

若使用值接收者,那么 Scale 方法会对原始 Vertex 值的副本进行操作。(对于函数的其它参数也是如此。)Scale 方法必须用指针接受者来更改 main 函数中声明的 Vertex 的值。

二、16行加*的运行结果

运行过程:

  1. 在main中执行第22行程序,使结构体Vertex中的X=3,Y=4;
  2. 执行main中的第23行程序,调用第16行的Scale函数,f=10,则v.X=30,v.Y=40;
  3. 执行main中的第24行程序,调用12行的Abs函数,代入v.X和v.Y的值,返回平方的和后的平方根->50;
  4. 程序运行结束。

三、16行不加*的运行结果

运行过程:

  1. 在main中执行第22行程序,使结构体Vertex中的X=3,Y=4;
  2. 执行main中的第23行程序,调用第12行的Abs函数,返回值->5;
  3. 程序运行结束。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 从零到一搭建出一个定时删除文件夹框架的收获

    框架的功能:定时读取指定路径下的配置文件,扫描配置文件中的节点,然后拼出一个新的路径,在该路径下判断任务文件夹是否该删除,如果该路径下的任务文件夹为0,同时删除...

    Zoctopus
  • 浅谈main(),int main(),void main(),int main(void)四者之间的区别

    Zoctopus
  • Luhn算法检验和验证

    Zoctopus
  • Python猫荐书系统之二:《Python最佳实践指南》

    昨天推送了一篇《来自Kenneth Reitz大神的建议:避免不必要的面向对象编程》,文中K神的建议出自他发起和维护的开源项目,这也就是我们今天荐书的主角了。

    Python猫
  • CAGradientLayer颜色渐变器

    下面是我用上面的代码实现的最终效果,startPoint是(0,0),endPoint是(1,1)。

    周希
  • [MySQL] 为什么要给表加上主键

    1.一个没加主键的表,它的数据无序的放置在磁盘存储器上,一行一行的排列的很整齐. 2.一个加了主键的表,并不能被称之为「表」。如果给表上了主键,那么表在...

    陶士涵
  • 二叉树的最小深度

    给定一个二叉树,找出其最小深度。 最小深度是从根节点到最近叶子节点的最短路径上的节点数量。 说明: 叶子节点是指没有子节点的节点。

    WindrunnerMax
  • TypeScript数组类型

    HueiFeng
  • TypeScript数组类型

    HueiFeng
  • SwiftU:将状态绑定到UI控件

    SwiftUI的@State属性包装器允许我们自由修改视图结构体,这意味着当程序更改时,我们可以更新视图属性以匹配。

    韦弦zhy

扫码关注云+社区

领取腾讯云代金券