我正在关注Go教程,因为我无法理解特定的方法签名而陷入困境:
func (p *Page) save() error {
filename := p.Title + ".txt"
return ioutil.WriteFile(filename, p.Body, 0600)
}
文档解释如下:
此方法的签名读取:“这是一个名为save的方法,它将接收器p作为指向Page的指针。它不接受任何参数,并返回类型错误的值。”
我无法理解接收器是什么。我会读这个,因为它是一个参数,但我希望参数在save()
。
答案 0 :(得分:9)
接收器只是参数的一个特例。 Go通过将第一个参数声明为接收者,为附加方法提供语法糖。
例如:
func (p *Page) save() error
读取“附加一个名为save
的方法,该方法会将error
返回到*Page
类型,而不是声明:
func save(p *Page) error
将读取“声明一个名为save
的函数,该函数接受*Page
类型的一个参数并返回error
”
作为证明它只是语法糖的证明,您可以尝试以下代码:
p := new(Page)
p.save()
(*Page).save(p)
最后几行代表完全相同的方法调用。
另请阅读this answer。
答案 1 :(得分:7)