理解指针(& 和 *)
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中文网其他相关文章!