揭开 Go 函数中引用和值传递的神秘面纱
在 Go 中,引用和值传递的概念可能看起来令人困惑最初。澄清一下,Go 充分利用了值传递,即使在处理指针时也是如此。当您将指针传递给函数时,您实际上传递的是它的值,而不是引用的对象。
函数参数中星号 (*) 的用途
何时您会在函数参数(如 func PutTasks(db *sql.DB))中的类型之前看到一个星号 (*),它表示该参数的类型为“指向sql.DB”,与类型“sql.DB”形成对比。这种区别至关重要,因为函数将通过此指针对引用的对象进行操作。
传递指针的好处
传递指针提供了一种在对象之间共享值的机制调用函数和被调用函数。对被调用函数内引用对象的任何修改对于调用者来说都是可见的。这本质上是 Java 的对象传递默认实现的功能,而 Go 需要显式使用指针来进行此类共享。
例如,假设您有一个 Setter 函数需要修改对象的属性。在 Java 中,这很简单,但在 Go 中,如果没有指针,函数只会接收对象的副本,所做的任何更改都不会反映在原始对象中。通过将指针传递给 Setter 函数,您可以有效地允许该函数对原始对象进行操作,从而实现在函数调用之外持续存在的更改。
其他资源
要深入研究这个主题,请参阅以下资源:
以上是Go 的值传递机制如何与指针一起工作?的详细内容。更多信息请关注PHP中文网其他相关文章!