我在通过引用或传递指针将值传递给结构时遇到困难。我将概述我正在努力实现的目标:
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/