这是我的代码:
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()
让它发挥作用。
谢谢
答案 0 :(得分:4)
如果你参考the Golang Language Specification - Method values部分,你会注意到这个引用(强调我的):
与选择器一样,使用指针对值接收器的非接口方法的引用将自动取消引用该指针:pt.Mv等效于(* pt).Mv 强>
因此,您的指针会自动解除引用。
net.Conn
是一个接口..因此,您必须手动取消引用指针才能使其生效。