Golang中的接收者函数

在 Go 语言中,具有接收者的函数被称为“方法”(method)。方法与普通的函数不同,它附加在特定的类型上,并且可以通过该类型的实例(或指向该类型的指针)来调用。

方法的定义包括接收者类型和名称,以及方法的名称和参数列表。以下是方法定义的一般形式:

func (recv *ReceiverType) MethodName(param1 Type1, param2 Type2, ...) ReturnType {
    // 方法体
}

这里的 recv 是接收者的名字,ReceiverType 是接收者的类型,它可以是值类型或者指针类型。MethodName 是方法的名称,param1, param2, … 是方法的参数,ReturnType 是方法返回的类型。

type MyType struct {
    Field int
}

func (m MyType) SetValue(value int) {
    m.Field = value
}

func (m *MyType) Increment() {
    m.Field++
}

 

在这个例子中,SetValue 是一个带有值接收者的方法,而 Increment 是一个带有指针接收者的方法。通过 MyType 类型的实例可以调用 SetValue 方法,而通过 MyType 类型的指针可以调用 Increment 方法。

 

通常而言,大部分场景推荐使用指针接收者,因为值接收者是深拷贝,指针接收者是浅拷贝。如果一个类型的方法中有一些使用了指针接收者,为了保持一致性,通常建议所有方法都使用指针接收者。

也有一些情况下使用值接收者是合适的:

  • 不可变对象:如果接收者是一个不可变对象,或者方法不需要修改接收者的状态,使用值接收者可以避免潜在的副作用。
  • 小型或简单结构体:对于小型或简单的结构体,复制开销很小,使用值接收者可以避免指针带来的复杂性。
  • other
posted @ 2025-03-26 18:00  Ashe|||^_^  阅读(17)  评论(0)    收藏  举报