首页 >后端开发 >Golang >Go 指针:何时使用'&”和'*”?

Go 指针:何时使用'&”和'*”?

Patricia Arquette
Patricia Arquette原创
2024-12-02 08:55:11174浏览

Go Pointers: When to Use `&` and `*`?

理解指针(& 和 *)

Go 通常需要将变量作为参数传递给函数。然而,在此类操作过程中遇到错误时可能会令人困惑。本文阐明了 & 和 * 指针之间的区别,解释了何时应使用它们。

指针和地址

指针是存储另一个变量地址的变量记忆。 & 运算符检索变量的地址。例如,如果 'u' 是 User 结构体,则 '&u' 返回 'u' 的地址。

使用 & 解码 JSON

了解 & 运算符,考虑以下代码:

var u User

if err := decoder.Decode(&u); err != nil {
    // Code to handle error...
}

json.Decode 函数需要一个指针来解码 JSON 数据。在此示例中,“u”只是一个 User 结构,而不是指针。通过使用“&u”,我们为函数提供“u”的地址,从而使解码成功。

指针和重定向

运算符可以被认为是对存储在指针地址处的值的“重定向”。例如,如果指针“x”存储“y”的地址,则“x”为我们提供“y”的值。

考虑以下代码:

x := new(User) // Creates a pointer to a User struct
*x = y        // Assigns the value of 'y' to the struct pointed to by 'x'
fmt.Println(*x) // Prints the value of 'y'

使用总结

  • 使用 & 获取地址变量或将指针传递给需要变量的函数。
  • 使用 * 访问存储在指针地址处的值。
  • 避免在非指针上使用 *,因为它将会导致错误。

以上是Go 指针:何时使用'&”和'*”?的详细内容。更多信息请关注PHP中文网其他相关文章!

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