Go 如何调用未报告的类';围棋中的方法

Go 如何调用未报告的类';围棋中的方法,go,private,Go,Private,我想在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) }

我想在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)

有什么解决办法吗?

TLDR你没有。这就是不出口东西的全部意义;防止直接访问它们

话虽如此,这个问题听起来很像一个问题。也许如果你能解释一下你想要实现的目标,我们可以建议一种替代方法

更长的答案

这可以通过反射实现(当您尝试时)。这只能在绝对罕见的情况下进行,即使是在这种情况下


为此,请提供一个完整、可复制的示例。您包含的代码没有编译,因此无法调试。

他的示例是:
reflect.ValueOf(&http.Server{}).MethodByName(“newConn”).Call([]reflect.Value{})
一行,它编译。虽然你是对的,但不清楚他想要实现什么。他不应该做这种事。我不能在90分钟内提出第二个问题。所以稍后将公布具体问题。我试图在子进程中使用父进程传递的已被接受的套接字文件描述符为http提供服务。(多进程服务器)父进程是C++服务器,接受IET连接。子进程是启动和运行GO程序的分叉C++进程。我已经成功地创建了关于传递的文件描述符整数的net.Conn。但我在GoHTTP服务器中找不到使用文件描述符(或net.Conn)的正确http服务方法@함치헌
http.Serve
采用a,这是一个包含3种方法的接口,这些方法围绕着
net.Conn
。如果使用
net.Conn
创建实现此接口的结构,则可以将其传递到
http.service
@함치헌 不要发布新问题。编辑这个。
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