func (db *Database) VerifyEmail(emailAddress string) (*data.UserName, error) {
....
}
有人可以帮助澄清1.what和2.为什么使用上述功能?从docs和this本书我可以看出,VerifyEmail将emailAdress作为参数,并将我认为的内存地址返回给用户名。
然而,(db *Database)
做了什么?我的意思是为什么把它放在func
之后和函数名之前?将内存地址作为指针传递给函数而不是表示它的变量可能是什么原因?
答案 0 :(得分:2)
方法名称前面的(*db Database)
是method receiver,类似于其他语言' " this",如果对象可能很大或者方法可能需要更改对象,则使用指针 - 如果复制它,该方法只能更改其对象的副本。
答案 1 :(得分:1)
在Go中,您可以使用指针和无指针方法receivers来定义方法。结合感觉分别为func (t *Type)
和func (t Type)
。
那么指针和非指针方法接收器之间的区别是什么?
a)使用指针接收器的原因?
read/write
而不仅仅是“读取”)如果在方法调用中需要这些特性,请使用指针接收器。
b)使用价值接收者的原因?