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

Go 函数参数

Go 函数参数

Go
qq_花开花谢_0 2021-09-27 09:59:38
func (db *Database) VerifyEmail(emailAddress string) (*data.UserName, error) {....}有人可以用上述功能帮助澄清 1.what 和 2.why 吗?从文档和这本书,我可以告诉大家,VerifyEmail中的emailadress以作为参数和返回什么,我认为是内存地址,用户名。然而,有什么作用(db *Database)呢?我的意思是为什么把它放在func函数名之前和之后?将内存地址作为指针而不是表示它的变量传递给函数的原因可能是什么?
查看完整描述

2 回答

?
开心每一天1111

TA贡献1836条经验 获得超13个赞

(*db Database)方法名的前面是方法接收器,类似于其它语言的‘本’,并使用一个指针,如果物体较大或有可能的方法可能需要更改的对象-如果你将它复制的方法只能更改其对象的副本。


查看完整回答
反对 回复 2021-09-27
?
潇湘沐

TA贡献1816条经验 获得超6个赞

在 Go 中,您可以使用指针和无指针方法接收器来定义方法。甲酸盐感觉像func (t *Type)func (t Type)各自的。

那么指针和非指针方法接收器有什么区别呢?

a) 使用指针接收器的原因?

  1. 您想要实际修改接收器(read/write而不是仅仅“读取”)

  2. 结构非常大,深拷贝很昂贵。

  3. 一致性:如果结构上的一些方法有指针接收器,其余的也应该。这允许行为的可预测性。

  4. 如果接收器是一个大的结构体或数组,指针接收器的效率更高。

如果您的方法调用需要这些特性,请使用指针接收器。

b) 使用值接收器的原因?

  1. 如果接收者是 map、func 或 chan,则不要使用指向它的指针。

  2. 如果接收者是一个切片并且该方法不重新切片或重新分配切片,则不要使用指向它的指针。


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

添加回答

举报

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