golang中,指针解引用其成员变量的问题

`

type nameage struct {
        name string
        age int
    }
    na:=new(nameage)
    (*na).age=25
    //na.age=25
    (*na).name="ddj"
    //na.name="ddj"
    fmt.Println((*na).name)
    fmt.Println(na.name)`

以上代码,我发现(*na).agena.age的作用是一样的,打印出来的结果也是一样的。

但是从语法上来看,我认为 (*na).name才是合法的,因为 na是一个指针,agename都是nameage的成员变量,应该先 (*na)来获取对象,然后再去获取这个对象的成员。

我不知道为什么结果都一样,是go自动处理掉了?还是有其他说法?

共 2 个回复


nimocat

因为golang不像C语言一样死板。go想要达到的效果是:使用者只需要定义传值还是传指针即可,剩下调用部分,爱咋调用咋调用,只要你自己知道这个到底是值还是指针就够用了。这也就是所谓的:go对指针变量的隐式解引用

# 0

ckingcfx

语法糖而已。
rob pike,Ken Thompson说可以,然后就可以了。

# 1