Go语言中的结构指针

时间:2015-03-24 10:55:14

标签: pointers go

这是我的代码:

package main
import ("fmt")

type Message struct {

    Text []byte
    Tag string
}

func main() {

    var m Message

    pkt := []byte("Hey")
    editMessage(&m, &pkt)

    fmt.Println(string(m.Text))
    }

func editMessage(m *Message, pkt *[]byte) {

    m.Text = *pkt
}

我在输出中按预期得到“嘿”。

如果我使用m.Text = *pkt更改(*m).Text = *pkt也可以。

哪个版本正确/更有效?或者只是一条捷径?

如果我使用

,这件事现在不能一直有效
c *net.Conn

作为函数的输入,我必须使用

something := (*c).RemoteAddr()  

让它发挥作用。

谢谢

1 个答案:

答案 0 :(得分:4)

如果你参考the Golang Language Specification - Method values部分,你会注意到这个引用(强调我的):

  

与选择器一样,使用指针对值接收器的非接口方法的引用将自动取消引用该指针:pt.Mv等效于(* pt).Mv

因此,您的指针会自动解除引用。

net.Conn是一个接口..因此,您必须手动取消引用指针才能使其生效。