猿问

为什么用户指针指向 golang 中的结构?

从教程中的 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)

}

我可以只做 vX 以获得相同的值,而不是分配一个指针(p = &v 然后 pX)。是否有类似的设计模式稍后会出现?


素胚勾勒不出你
浏览 120回答 1
1回答

慕的地8271018

是的,你本来可以做到v.X = 1e9的。这就是示例的重点,v.X = 1e9并且p := &v; p.X = 1e9是等效的。这是一个简单的例子来说明指针是如何工作的。这并不意味着实用。一旦您开始将结构传递给方法,指针就变得非常重要。假设您想编写一个设置 X 的方法。如果我们将结构作为值传递...func (v Vertex) setX(newX int) {    v.X = newX}func main() {    v := Vertex{1, 2}    v.setX(1e9)    fmt.Println(v)}我们得到{1 2}. 它没有设置。这是因为 Go将值复制到方法中。setX在您的结构的副本上工作。相反,我们传递一个指针。func (v *Vertex) setX(newX int) {    v.X = newX}现在我们得到{1000000000 2}. setX正在处理指向您的结构的指针。注意v.setX(1e9)是真的(&v).setX(1e9),但 Go 会为你翻译。方法并不是唯一有用的地方指针。当您想在多个位置处理相同的数据时,请使用指针。
随时随地看视频慕课网APP

相关分类

Go
我要回答