func (db *Database) VerifyEmail(emailAddress string) (*data.UserName, error) {....}有人可以用上述功能帮助澄清 1.what 和 2.why 吗?从文档和这本书,我可以告诉大家,VerifyEmail中的emailadress以作为参数和返回什么,我认为是内存地址,用户名。然而,有什么作用(db *Database)呢?我的意思是为什么把它放在func函数名之前和之后?将内存地址作为指针而不是表示它的变量传递给函数的原因可能是什么?
2 回答
潇湘沐
TA贡献1816条经验 获得超6个赞
在 Go 中,您可以使用指针和无指针方法接收器来定义方法。甲酸盐感觉像func (t *Type)
和func (t Type)
各自的。
那么指针和非指针方法接收器有什么区别呢?
a) 使用指针接收器的原因?
您想要实际修改接收器(
read/write
而不是仅仅“读取”)结构非常大,深拷贝很昂贵。
一致性:如果结构上的一些方法有指针接收器,其余的也应该。这允许行为的可预测性。
如果接收器是一个大的结构体或数组,指针接收器的效率更高。
如果您的方法调用需要这些特性,请使用指针接收器。
b) 使用值接收器的原因?
如果接收者是 map、func 或 chan,则不要使用指向它的指针。
如果接收者是一个切片并且该方法不重新切片或重新分配切片,则不要使用指向它的指针。
- 2 回答
- 0 关注
- 207 浏览
添加回答
举报
0/150
提交
取消