Pointers Go语言中的结构指针

Pointers Go语言中的结构指针,pointers,go,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 *Mes

这是我的代码:

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()  
让它工作

谢谢

如果您参考第节,您会注意到这句话:

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

因此,您的指针将被自动取消引用

net.Conn是一个接口。。因此,您必须手动取消对指针的引用,才能使其正常工作。

如果您参考第节,您会注意到以下内容:

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

因此,您的指针将被自动取消引用


net.Conn是一个接口。。因此,您必须手动取消对指针的引用,才能使其正常工作。

注意,在实际代码中不会出现这种情况,因为您几乎不应该使用指向接口的指针。而且您通常也不会使用指向切片、映射或字符串的指针。切片已经是对底层数据的引用,因此不需要额外的间接寻址,除非您想更新切片的长度或容量,但在许多此类情况下,最好像append那样返回结果切片。我使用它是因为我需要在函数内获取连接的源IP地址,为了提高效率,我将连接作为参考,而不是处理它。我错了吗?请注意,这在实际代码中不会出现,因为您几乎不应该使用指向接口的指针。而且您通常也不会使用指向切片、映射或字符串的指针。切片已经是对底层数据的引用,因此不需要额外的间接寻址,除非您想更新切片的长度或容量,但在许多此类情况下,最好像append那样返回结果切片。我使用它是因为我需要在函数内获取连接的源IP地址,为了提高效率,我将连接作为参考,而不是处理它。我错了吗?