为了账号安全,请及时绑定邮箱和手机立即绑定

参数和接收器有什么区别

参数和接收器有什么区别

Go
陪伴而非守候 2021-06-08 13:24:23
我正在学习 Go 教程,但由于无法理解特定的方法签名而陷入困境:func (p *Page) save() error {    filename := p.Title + ".txt"    return ioutil.WriteFile(filename, p.Body, 0600)}文档解释如下:这个方法的签名是:“这是一个名为 save 的方法,它接受一个指向 Page 的指针 p 作为它的接收者。它不接受任何参数,并返回一个类型为 error 的值。”我无法理解接收器是什么。我会把它读成一个参数,但我希望参数在save().
查看完整描述

2 回答

?
天涯尽头无女友

TA贡献1831条经验 获得超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)

最后两行表示完全相同的方法调用。

另外,请阅读此答案


查看完整回答
反对 回复 2021-06-21
  • 2 回答
  • 0 关注
  • 242 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信