在Go语言中,定义方法时,如果方法接收者类型前面带有星号 *
,表示该方法是作用在指针类型上的。
具体来说,如果一个方法的接收者类型是 *Type
,那么它可以被一个指向该类型的指针调用。而如果一个方法的接收者类型是 Type
,那么它只能被该类型的值直接调用。
当一个方法是作用在指针类型上时,对该类型的值调用该方法时,Go语言会自动将该值的地址取出传递给方法,这样方法就可以修改该值。
示例代码如下:
package main
import "fmt"
type Person struct {
Name string
}
func (p *Person) SayHello() {
fmt.Println("Hello, " + p.Name)
}
func main() {
p := &Person{Name: "Alice"} // 创建一个Person类型的指针
p.SayHello() // 通过指针调用方法
}
在上述代码中,SayHello
方法的接收者类型是 *Person
,它可以被一个指向 Person
类型的指针调用。在 main
函数中,我们使用 &Person
创建了一个指向 Person
类型的指针,并通过该指针调用 SayHello
方法。
需要注意的是,如果一个方法的接收者类型是指针类型,那么该类型的值和指针都可以调用该方法,Go语言会自动帮我们进行值和指针之间的转换。但是如果一个方法的接收者类型是值类型,那么只能使用该类型的值来调用该方法。