我在通过引用或传递指针将值传递给结构时遇到困难。我将概述我正在努力实现的目标:

type FooStruct struct {
    foo1, foo2, foo3 int //etc
    connection *net.Conn
}

func(session FooStruct) Run(conn *net.Conn) {
    session.connection = conn
    session.connection.RemoteAddr()
    ......
}

func main() {
    server, err := net.Listen("tcp", ":8484")
    connection, err := server.Accept()
    foo := FooStruct{}
    foo.Run(&connection)
}

上面是我想要实现的一个例子,我只想传递一个指向结构中连接变量的引用指针。我曾尝试阅读文档并阅读教程,但我感到困惑。

编译时出现错误 - session.connection.RemoteAddr 未定义(类型 * net.Conn 没有字段或方法 RemoteAddr)。它确实具有该方法,因为在复制变量时它可以正常工作。然而,这不是我想要做的。

最佳答案

由于 net.Conn 是一个接口(interface),而不是一个结构体,你应该直接传递和存储它。像这样:

type FooStruct struct {
    foo1, foo2, foo3 int
    connection       net.Conn
}

func(session *FooStruct) Run(conn net.Conn) {
    session.connection = conn
    session.connection.RemoteAddr()
}

func main() {
    server, err := net.Listen("tcp", ":8484")
    connection, err := server.Accept()
    foo := FooStruct{}
    foo.Run(connection)
}

另请参阅 passing interfaces to pointers 上的 Go FAQ 条目。

另请注意,我将 Run 方法的接收器更改为指针 which is generally what you want

关于pointers - Golang 通过引用结构成员值来传递变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23964100/

10-11 23:13
查看更多