登录
首页 >  Golang >  Go问答

这段 Go 代码如何在不取消引用的情况下通过指针设置对象的值?

来源:Golang技术栈

时间:2023-03-07 14:43:48 370浏览 收藏

编程并不是一个机械性的工作,而是需要有思考,有创新的工作,语法是固定的,但解决问题的思路则是依靠人的思维,这就需要我们坚持学习和更新自己的知识。今天golang学习网就整理分享《这段 Go 代码如何在不取消引用的情况下通过指针设置对象的值?》,文章讲解的知识点主要包括golang,如果你对Golang方面的知识点感兴趣,就不要错过golang学习网,在这可以对大家的知识积累有所帮助,助力开发能力的提升。

问题内容

我正在从 Java/Python 背景学习 Go,并且对 Go 教程中的这段代码感到困惑。在下面的代码中,该行

p.X = 1e9

使用指针 p 将 vX 的值设置为 1e9。 因为 p 只是一个指向 v 的指针,所以设置 v 的值不需要解引用吗? 因此正确的说法是:

*p.X = 1e9 

自然,这会导致错误。有人可以解释为什么 Go 示例代码可以按原样工作吗?

有问题的代码:

package main

import (
    "fmt"
)

type Vertex struct {
    X int
    Y int
}

func main() {
    v := Vertex{1, 2}
    p := &v
    p.X = 1e9
    fmt.Println(v)
}

正确答案

在 go 中,编译器会自动将表达式转换为(*p).X. 从语言规范

如果 x 的类型是命名指针类型并且 (*x).f 是表示字段(但不是方法)的有效选择器表达式,则 xf 是 (*x).f 的简写。

文中关于golang的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《这段 Go 代码如何在不取消引用的情况下通过指针设置对象的值?》文章吧,也可关注golang学习网公众号了解相关技术文章。

声明:本文转载于:Golang技术栈 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>
评论列表