去功能参数

时间:2015-03-22 01:09:39

标签: go

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

有人可以帮助澄清1.what和2.为什么使用上述功能?从docsthis本书我可以看出,VerifyEmail将emailAdress作为参数,并将我认为的内存地址返回给用户名。

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

2 个答案:

答案 0 :(得分:2)

方法名称前面的(*db Database)method receiver,类似于其他语言' " this",如果对象可能很大或者方法可能需要更改对象,则使用指针 - 如果复制它,该方法只能更改其对象的副本。

答案 1 :(得分:1)

在Go中,您可以使用指针和无指针方法receivers来定义方法。结合感觉分别为func (t *Type)func (t Type)

那么指针和非指针方法接收器之间的区别是什么?

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

  1. 您想要实际修改接收器(read/write而不仅仅是“读取”)
  2. 结构非常大,深层副本很贵。
  3. 一致性:如果struct上的某些方法有指针接收器,其余的也应该如此。这样可以预测行为。
  4. 如果接收器是一个大型结构或数组,则指针接收器效率更高。
  5. 如果在方法调用中需要这些特性,请使用指针接收器。

    b)使用价值接收者的原因?

    1. 如果接收器是map,func或chan,请不要使用指向它的指针。
    2. 如果接收器是一个切片,并且该方法没有重新切片或重新分配切片,请不要使用指向它的指针。