Go 函数参数

func (db *Database) VerifyEmail(emailAddress string) (*data.UserName, error) {

....

}

有人可以用上述功能帮助澄清 1.what 和 2.why 吗?从文档和这本书,我可以告诉大家,VerifyEmail中的emailadress以作为参数和返回什么,我认为是内存地址,用户名。


然而,有什么作用(db *Database)呢?我的意思是为什么把它放在func函数名之前和之后?将内存地址作为指针而不是表示它的变量传递给函数的原因可能是什么?


qq_花开花谢_0
浏览 208回答 2
2回答

开心每一天1111

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

潇湘沐

在 Go 中,您可以使用指针和无指针方法接收器来定义方法。甲酸盐感觉像func (t *Type)和func (t Type)各自的。那么指针和非指针方法接收器有什么区别呢?a) 使用指针接收器的原因?您想要实际修改接收器(read/write而不是仅仅“读取”)结构非常大,深拷贝很昂贵。一致性:如果结构上的一些方法有指针接收器,其余的也应该。这允许行为的可预测性。如果接收器是一个大的结构体或数组,指针接收器的效率更高。如果您的方法调用需要这些特性,请使用指针接收器。b) 使用值接收器的原因?如果接收者是 map、func 或 chan,则不要使用指向它的指针。如果接收者是一个切片并且该方法不重新切片或重新分配切片,则不要使用指向它的指针。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go