Go函数参数

Go函数参数,go,Go,有人能帮助澄清1.什么和2.为什么使用上述功能吗?从和书中,我可以看出VerifyEmail将EmailAddress作为一个参数,并将我认为是内存地址的内容返回给用户名 但是,(db*数据库)做什么?我的意思是,为什么要把它放在func之后和函数名之前?与表示函数的变量相反,将内存地址作为指针传递给函数的原因可能是什么?方法名称前面的(*db Database)是,类似于其他语言的“this”,如果对象可能很大或方法可能需要更改对象,则使用指针——如果复制对象,该方法只能更改对象的副本。在Go

有人能帮助澄清1.什么和2.为什么使用上述功能吗?从和书中,我可以看出VerifyEmail将EmailAddress作为一个参数,并将我认为是内存地址的内容返回给用户名


但是,
(db*数据库)
做什么?我的意思是,为什么要把它放在
func
之后和函数名之前?与表示函数的变量相反,将内存地址作为指针传递给函数的原因可能是什么?

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

在Go中,您可以使用指针方法和无指针方法定义方法。格式化感觉像是
func(t*Type)
func(t-Type)
各自

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

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

  • 您希望实际修改接收器(
    读/写
    ,而不是仅仅“读”)
  • 结构非常大,而深度副本的成本很高
  • 一致性:如果结构上的某些方法具有指针接收器,则其他方法也应具有指针接收器。这允许行为的可预测性
  • 如果接收器是大型结构或数组,则指针接收器效率更高
  • 如果在方法调用中需要这些特性,请使用指针接收器

    b) 使用价值接受者的原因

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

  • 这是receiver()方法,类似于其他语言的“this”,如果对象可能很大,或者方法可能需要更改对象,则可以使用指针。如果复制对象,则该方法只能更改对象的副本。@TwoTwo请将其粘贴在回答中,以便我可以接受它?非常感谢。有道理
    func (db *Database) VerifyEmail(emailAddress string) (*data.UserName, error) {
    ....
    }