猿问

参数和接收器有什么区别

我正在学习 Go 教程,但由于无法理解特定的方法签名而陷入困境:


func (p *Page) save() error {

    filename := p.Title + ".txt"

    return ioutil.WriteFile(filename, p.Body, 0600)

}

文档解释如下:


这个方法的签名是:“这是一个名为 save 的方法,它接受一个指向 Page 的指针 p 作为它的接收者。它不接受任何参数,并返回一个类型为 error 的值。”


我无法理解接收器是什么。我会把它读成一个参数,但我希望参数在save().


陪伴而非守候
浏览 243回答 2
2回答

天涯尽头无女友

接收器只是参数的一个特例。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)最后两行表示完全相同的方法调用。另外,请阅读此答案。
随时随地看视频慕课网APP

相关分类

Go
我要回答