go接收器详细介绍

在Go语言中,接收器(Receiver)是与方法关联的特殊参数。方法是绑定到特定类型的函数,使用接收器可以让你定义一个特定类型的方法,从而使得该方法能访问接收器类型的属性和方法。接收器可以是值接收器或指针接收器。

接收器的语法

接收器声明在方法名称之前,放在括号内。语法如下:

func (receiverType receiverName) methodName(parameters) returnType {
    // method body
}

值接收器和指针接收器

值接收器

值接收器会将接收器类型的一个副本传递给方法,因此在方法内部对接收器的修改不会影响到原始值。

package main

import "fmt"

type Circle struct {
    radius float64
}

// 值接收器
func (c Circle) Area() float64 {
    return 3.14 * c.radius * c.radius
}

func main() {
    c := Circle{radius: 5}
    fmt.Println("Area of Circle:", c.Area())
}
指针接收器

指针接收器会将接收器类型的地址传递给方法,因此在方法内部对接收器的修改会影响到原始值。

package main

import "fmt"

type Circle struct {
    radius float64
}

// 指针接收器
func (c *Circle) Scale(factor float64) {
    c.radius = c.radius * factor
}

func main() {
    c := Circle{radius: 5}
    fmt.Println("Original Radius:", c.radius)
    c.Scale(2)
    fmt.Println("Scaled Radius:", c.radius)
}

使用指针接收器的原因

  1. 修改接收器的值:如果需要在方法中修改接收器的值,必须使用指针接收器。
  2. 避免值拷贝:对于大的结构体,使用指针接收器可以避免值拷贝,提高性能。
  3. 一致性:对于一些类型,最好对所有的方法都使用指针接收器,以保持一致性。

示例:完整的结构体和方法

package main

import "fmt"

type Rectangle struct {
    width, height float64
}

// 值接收器
func (r Rectangle) Area() float64 {
    return r.width * r.height
}

// 指针接收器
func (r *Rectangle) Scale(factor float64) {
    r.width = r.width * factor
    r.height = r.height * factor
}

func main() {
    r := Rectangle{width: 5, height: 10}
    fmt.Println("Original Area:", r.Area())

    r.Scale(2)
    fmt.Println("Scaled Width:", r.width)
    fmt.Println("Scaled Height:", r.height)
    fmt.Println("Scaled Area:", r.Area())
}

在这个例子中,Rectangle结构体有两个方法:Area使用值接收器,而Scale使用指针接收器。通过这种方式,你可以灵活地控制是否要修改接收器的值以及是否要避免值拷贝。

  • 7
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值