前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Go指南_指针接收者

Go指南_指针接收者

作者头像
Zoctopus
发布2018-06-29 14:31:09
1940
发布2018-06-29 14:31:09
举报

源地址 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. 程序运行结束。
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-06-22 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、描述
  • 二、16行加*的运行结果
  • 三、16行不加*的运行结果
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档