文档章节

Go方法接收器——Method Receiver

秋风醉了
 秋风醉了
发布于 2016/10/08 14:01
字数 327
阅读 87
收藏 0

Go方法接收器——Method Receiver

看下面代码,

package main

import "fmt"

type Rect struct {
	X, Y, Area, Length float64
}

/**
该方法的接收器是指针类型
*/
func (r *Rect) CalArea() {
	r.Area = r.X * r.Y
}

/**
该方法的接收器是非指针类型
*/
func (r Rect) CalLength() {
	r.Length = 2 * (r.X + r.Y)
}

func main() {

	r1 := Rect{3, 4, 0, 0} //普通类型,非指针类型

	r1.CalArea()

	r1.CalLength()

	fmt.Println(r1.Area) //12

	fmt.Println(r1.Length) //0

	r2 := &Rect{3, 4, 0, 0}

	r2.CalArea()

	r2.CalLength()

	fmt.Println(r2.Area) //12

	fmt.Println(r2.Length) //0

}

方法接收器

不管你的method的receiver是指针类型还是非指针类型,都是可以通过指针/非指针类型进行调用的,编译器会帮你做类型转换(解引用和取地址)。

在声明一个method的receiver该是指针还是非指针类型时,你需要考虑两方面的内部,第一方面是这个对象本身是不是特别大,如果声明为非指针变量时,调用会产生一次拷贝;第二方面是如果你用指针类型作为receiver,那么你一定要注意,这种指针类型指向的始终是一块内存地址,就算你对其进行了拷贝。熟悉C或者C艹的人这里应该很快能明白。

=======END=======

© 著作权归作者所有

共有 人打赏支持
秋风醉了
粉丝 239
博文 572
码字总数 416654
作品 0
朝阳
程序员
私信 提问
Go方法——方法声明

Go方法——方法声明 在函数声明时,在其名字之前放上一个变量,即是一个方法。这个附加的参数会将该函数附加到这种类型上,即相当于为这种类型定义了一个独占的方法。 下面来写我们第一个方法...

秋风醉了
2016/07/09
28
0
Android Service 服务(二)—— BroadcastReceiver

一、 BroadcastReceiver简介 BroadcastReceiver,用于异步接收广播Intent,广播Intent是通过调用Context.sendBroadcast()发送、BroadcastReceiver()接收。 广播Intent的发送是通过调用Conte...

长平狐
2013/01/06
145
0
Android学习之Android广播机制

一提起广播,我们首先想到的是收音机,当我们想要收听某个广播台时只需要将收音机的频率调至广播台所在的频率即可!而Android中的广播其实和收音机非常相似,不过它没有所谓的频率,它是由系...

wustrive_2008
2011/07/02
0
2
Go方法——基于对象指针的方法

Go方法——基于对象指针的方法 当调用一个函数时,会对其每一个参数值进行拷贝,如果一个函数需要更新一个变量,或者函数的其中一个参数实在太大我们希望能够避免进行这种默认的拷贝,这种情...

秋风醉了
2016/07/10
67
0
6个能让你的 Kotlin 代码库更有意思的“魔法糖” —— 第二部分

尝试新事物。我认为人们说的许多智力都来自于好奇心。—— Aaron Swartz 这是三部系列中的第二部。你需要先阅读第一部分。 用一些我最喜欢的 Kotlin 结构,来继续我们的旅程。在第一部分,你...

oschina
2017/12/11
2.1K
0

没有更多内容

加载失败,请刷新页面

加载更多

闲话高并发的那些神话,看京东架构师如何把它拉下神坛

高并发也算是这几年的热门词汇了,尤其在互联网圈,开口不聊个高并发问题,都不好意思出门。高并发有那么邪乎吗?动不动就千万并发、亿级流量,听上去的确挺吓人。但仔细想想,这么大的并发与...

James-
13分钟前
1
0
Emacs 系列:让我们拥抱 Emacs 和 org 模式

导读 我必须承认,在使用了几十年的 vim 后, 我被 Emacs 吸引了。长期以来,我一直对如何组织安排事情感到沮丧。我也有用过 GTD 和 ZTD 之类的方法,但是像邮件或是大型文件这样的事务真的很...

问题终结者
14分钟前
1
0
解析Node.js通过axios实现网络请求

本次给大家分享一篇node.js通过axios实现网络请求的方法,写的十分的全面细致,具有一定的参考价值,对此有需要的朋友可以参考学习下。如有不足之处,欢迎批评指正。 1、使用Npm 下载axios n...

前端攻城老湿
27分钟前
4
0
深入浅出之React-redux中connect的装饰器用法@connect

这篇文章主要介绍了react-redux中connect的装饰器用法@connect详解,写的十分的全面细致,具有一定的参考价值,对此有需要的朋友可以参考学习下。如有不足之处,欢迎批评指正。 通常我们需要一...

前端攻城小牛
28分钟前
2
0
详解css BEM书写规范

BEM是基于组件的web开发方法。其思想是将用户界面分隔为独立的块,从而使开发复杂的UI界面变得更简单和快,且不需要粘贴复制便可复用现有代码。BEM由Block、Element、Modifier组成。选择器里...

前端小攻略
44分钟前
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部