3.1. 方法与接收器
g g study,d d up!
在 Go 中,方法是与结构体相关联的函数。结构体可以定义方法,方法可以访问结构体的字段,并且可以在结构体上调用。与函数类似,方法也具有参数和返回值。方法定义的语法与函数定义类似,但在其名称之前必须包含接收器。
接收器可以是值类型或指针类型。如果接收器是值类型,则方法可以读取结构体的字段,但无法修改它们。如果接收器是指针类型,则方法可以读取和修改结构体的字段。因此,如果需要修改结构体的状态,则需要使用指针接收器。
下面是一个使用值接收器和指针接收器的方法的示例:
type Rectangle struct {
width float64
height float64
}
// 值接收器方法
func (r Rectangle) Area() float64 {
return r.width * r.height
}
// 指针接收器方法
func (r *Rectangle) Scale(widthFactor float64, heightFactor float64) {
r.width *= widthFactor
r.height *= heightFactor
}
方法可以通过指针或值类型调用。如果使用指针类型,则可以在方法内部修改结构体的状态,否则仅可读取结构体的状态。在调用方法时,如果接收器是值类型,则会在调用前复制一份,因此如果需要在方法内部修改结构体的状态,则需要使用指针类型的接收器以避免复制。
欢迎关注公众号上海php自学中心,一起交流。