Go方法接收器——Method Receiver
Go方法接收器——Method Receiver
秋风醉了 发表于1年前
Go方法接收器——Method Receiver
  • 发表于 1年前
  • 阅读 25
  • 收藏 0
  • 点赞 0
  • 评论 0
摘要: Go方法接收器——Method Receiver

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=======

共有 人打赏支持
粉丝 215
博文 609
码字总数 434222
×
秋风醉了
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: