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自动处理掉了?还是有其他说法?


ddxx11223 于 2017-10-05 20:37 修改
1 回复
nimocat
#1 nimocat • 2018-02-16 23:22

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

需要 登录 后方可回复, 如果你还没有账号你可以 注册 一个帐号。