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 条评论
登录 后参与评论

相关文章

来自专栏ShaoYL

Objective-C中的@property和@synthesize用法

40511
来自专栏Java帮帮-微信公众号-技术文章全总结

Java面试系列9

✎一、Java有没有goto? java中的保留字,现在没有在java中使用。 ✎二、必须要知道的运行时异常 ArithmeticException 是...

2774
来自专栏java一日一条

Java 程序优化:字符串操作、基本运算方法等优化策略

字符串对象或者其等价对象 (如 char 数组),在内存中总是占据最大的空间块,因此如何高效地处理字符串,是提高系统整体性能的关键。

1213
来自专栏专注数据中心高性能网络技术研发

HERD--GCC宏

减少跳转语句失效时CPU等待取指令时间,提高CPU效率 使用__builtin_expect(EXP,N) 意思是EXP==N的概率很大 一般封装为LIKELY...

2985
来自专栏Crossin的编程教室

【Python 第24课】 if的嵌套

和for循环一样,if也可以嵌套使用,即在一个if/elif/else的内部,再使用if。这有点类似于电路的串联。 if 条件1: if 条件2: ...

3106
来自专栏运维小白

linux基础(day27)

9.4 sed(上) sed工具 sed -n '5'p test.txt sed -n '1,5'p test.txt sed -n '1,$'p test....

1937
来自专栏自学笔记

python基本常识

tuple,str都可以看做是一种list,都可以进行切片操作。 利用切片操作,去掉一个字符串的前后空格。要注意是是前后空格是不止一个的,可能有很多个。

3515
来自专栏Coco的专栏

Javascript优化细节:短路表达式

1494
来自专栏塔奇克马敲代码

第 17 章 标准库特殊设施

732
来自专栏转载gongluck的CSDN博客

C++:istreambuf_iterator与istream_iterator的区别

在C++中,流(stream)也可以看做是容器,因而也有相应的iterator来遍历流中的内容,其中就有本文要介绍的两个流迭代器:istreambuf_iter...

3549

扫码关注云+社区

领取腾讯云代金券