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

克洛伊:

我正在从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)
}
弗雷德里克·杜威(Frederik Deweerdt):

在进行中,编译器自动将表达式转换为(*p).X根据语言规范

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在不取消引用指针的情况下返回指针的指针值?

C ++教程在不取消引用的情况下将值分配给指针

如何在不使用临时变量的情况下取消引用返回指针的函数的返回值?

如何在不终止执行此操作的线程的情况下取消文件上载/下载操作?

在以下情况下,如何正确地取消引用对象以设置其成员变量?

默认情况下,全局/局部结构指针的取消引用值是否始终设置为 0(或等效值)?

如何在不取消引用的情况下确定指向数据的大小?

Perl:如何在不创建数组副本的情况下取消引用数组?

如何在不取消API调用的情况下使用axios设置超时?

如何在没有通过引用传递的资源的情况下在 java 中简化此代码?

如何在不添加无法访问的代码的情况下使此异步lambda进行编译?

如何在不排序的情况下取消堆叠?

在不取消引用的情况下使用带有指针的索引

在不取消引用的情况下保持指针越界是否安全?

GSON如何在不抛出空指针异常的情况下测试键/值对

我如何在没有标签对象的情况下使用Beautiful汤取消值

如何在不破坏列表的情况下释放指针?

Swift:如何在不增强其他对象的情况下创建对它的引用?

如何在不传递引用的情况下设置useState变量的值

如何在不构造对象的情况下,在运行时设置数组大小?

如何在不出现此错误的情况下访问其他脚本的值:CS0120:非静态字段需要对象引用?

如何在不破坏原有代码的情况下增加函数的返回值?

如何在不设置值的情况下通知C ++ Future?

如何在不更改其值的情况下获得先前设置的警报的剩余时间?

如何在不暴露代码的情况下显示动画?

如何在不蚀的情况下运行硒代码?

如何在不更改其值的情况下修改原始DateTime对象?

如何在不更新实际数据库的情况下更改DBIx :: Class对象的值

如何在不循环的情况下访问对象数组中的所有键和值