首页 >后端开发 >Golang >Go 指针:'&”和'*”有什么区别以及如何使用它们?

Go 指针:'&”和'*”有什么区别以及如何使用它们?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-11-30 18:40:11481浏览

Go Pointers: What's the Difference Between `&` and `*` and How Are They Used?

& 和 * 指针:差异和用法

在 Go 中,函数参数可以通过值或引用传递。按值传递时,会创建变量的副本并将其传递给函数。当按引用传递时,改为传递变量的地址,允许函数修改原始值。

这种按引用传递的概念是使用指针来实现的。指针是一个保存另一个变量地址的变量。 & 运算符返回变量的地址,而 * 运算符用于访问存储在地址中的值。

使用 &

& 运算符用于通过引用传递变量,如下所示函数参数。例如,考虑以下函数:

func SendNotification(user *User) {
    // ...
}

此函数需要 *User 作为参数,其中 * 表示参数是指向 User 结构的指针。要传递 User 类型的变量 u,需要使用 & 运算符,如下所示:

SendNotification(&u)

这会将 u 的地址传递给函数,允许其修改原始值。

使用 *

* 运算符用于访问存储在地址中的值。例如,给出以下代码:

var userPtr *User
userPtr = &u

userPtr 是一个指针,保存存储在 u 中的 User 结构体的地址。要访问存储在该地址的值,我们可以使用 * 运算符:

*userPtr = User{name: "John"}

这会将新值分配给 userPtr 中存储的地址处的 User 结构。

区别和用法

& 和 * 的区别在于它们的功能。 & 用于获取变量的地址,允许通过引用传递变量。 * 用于访问某个地址存储的值,允许对原始值进行修改。

在实践中,& 通常用于通过引用函数来传递变量,而 * 用于修改存储的值在地址处,例如在方法中使用指针作为接收器时。

用法示例

考虑以下内容代码:

func main() {
    u := User{name: "Jane"}

    SendNotification(&u) // Passing by reference

    fmt.Println(u.name) // Prints "Jane"
}

这里,SendNotification 函数采用 *User 作为参数。通过传递 &u,我们允许函数修改 u 的原始值。在函数内部,可以像这样修改该值:

func SendNotification(user *User) {
    user.name = "John"
}

这将更改通过引用传递的 User 结构的名称。

以上是Go 指针:'&”和'*”有什么区别以及如何使用它们?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn