为什么指针必须使用星号而不是结构指针?

Did*_*tus 2 struct pointers go

我想我错过了一部分技术背景。但我不明白,为什么我必须使用 * 来访问简单指针的值,而不是访问结构的值。

例如一个简单的值:

func main() {
    i := 42
    p := &i
    *p = 21         // <<< I have to use an asterisk to access the value
    // ...
}
Run Code Online (Sandbox Code Playgroud)

和一个带有结构的例子:

type Vertex struct {
    X int
    Y int
}

func main() {
    v := Vertex{1, 2}
    p := &v
    p.X = 1e9       // <<< I do not have to use an asterisk
    // ...
}
Run Code Online (Sandbox Code Playgroud)

(是的,示例来自此处的官方 go lang tour:https : //go-tour-de.appspot.com/moretypes/4

就我的想法而言,我会期待这样的事情

    *p.X = 1e9
Run Code Online (Sandbox Code Playgroud)

或者(是的,这有点奇怪)

    p.*X = 1e9
Run Code Online (Sandbox Code Playgroud)

那么,为什么我不必使用星号来访问结构指针呢?

Ami*_*pta 5

您在 [此处] 中找到该示例的官方 Golang 之旅明确指出:

X当我们有结构指针时访问结构的字段,p我们可以写(*p).X. 但是,这种表示法很麻烦,因此该语言允许我们改为只编写p.X,而无需显式取消引用。

  • 有趣,不知道有其他语言的版本,也没想到会有不同的内容。很高兴知道,谢谢。 (3认同)
  • 伟大的!我使用德语版本的旅游来寻找答案,但缺少了这个小但重要的细节(https://go-tour-de.appspot.com/moretypes/4)。请注意,始终使用英文原始文档。谢谢您的回答。 (2认同)