我想在net / http / server.go
中调用http.Server的newConn方法func (srv *Server) newConn(rwc net.Conn) *conn {
c := &conn{
server: srv,
rwc: rwc,
}
if debugServerConnections {
c.rwc = newLoggingConn("server", c.rwc)
}
return c
}
尝试使用反映进行访问但发生错误
conn := ...
server := &http.Server{}
inputs := make([]reflect.Value, 1)
inputs[0] = reflect.ValueOf(conn)
c := reflect.ValueOf(server).MethodByName("newConn").Call(inputs)
panic: reflect: call of reflect.Value.Call on zero Value
goroutine 17 [running, locked to thread]:
reflect.flag.mustBe(0x0, 0x13)
/usr/local/go/src/reflect/value.go:201 +0xae
reflect.Value.Call(0x0, 0x0, 0x0, 0xc420047d10, 0x1, 0x1, 0x0, 0x0, 0xc4200e82c0)
/usr/local/go/src/reflect/value.go:300 +0x38
有没有解决方案?
答案 0 :(得分:1)
TLDR 您没有。这就是不出口东西的重点;防止直接访问它们。
话虽如此,这个问题听起来很像XY Problem。也许如果你能解释你想要实现的目标,我们可以提出另一种方法。
更长的答案
这可以通过反射实现(当你正在尝试时)。这应该只在绝对最罕见的情况下进行,即便如此。
为此,请提供完整,可重复的示例。您包含的代码无法编译,因此无法进行调试。