默认情况下,方法中的指针是否被取消引用?

m0m*_*eni 12 pointers go

我对Go中结构的方法感到困惑.我一直在他们的教程中跟随:

func (p *Page) save() error {
    filename := p.Title + ".txt"
    return ioutil.WriteFile(filename, p.Body, 0600)
}
Run Code Online (Sandbox Code Playgroud)

根据我的理解,p是指针,你需要在检索属性之前取消引用指针,例如:

filename := (*p).Title + ".txt"
Run Code Online (Sandbox Code Playgroud)

对我来说唯一有意义的方法是点如果像->C++一样.我错过了什么?

Tim*_*per 23

是的,指向结构的指针会自动解除引用.从选择器规格:

以下规则适用于选择器:

  1. 对于值x类型的T*T其中T不是指针或接口类型,x.f表示在最浅深度域或方法T ,其中有这样一个f.如果没有一个f深度最浅的选择器表达式是非法的.

...

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

因此,以下两个语句是相同的(第一个是首选):

filename := p.Title + ".txt"
filename := (*p).Title + ".txt"
Run Code Online (Sandbox Code Playgroud)