Go语言 尝试从httptest启动unstartedServer时出现nil指针错误

pbpqsu0x  于 2023-03-27  发布在  Go
关注(0)|答案(1)|浏览(132)

我试图在我的代码中构建一个模拟httpserver。我想指定端口号,所以我使用了下面的代码:

l, _ := net.Listen("http", "localhost:49219")
svr := httptest.NewUnstartedServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { ... }))
svr.Listener.Close()
svr.Listener = l
svr.Start()

然而,在svr.Start()行,我得到一个错误:

panic: runtime error: invalid memory address or nil pointer dereference [recovered]
panic: runtime error: invalid memory address or nil pointer dereference

显然svr在这一点上不是nil。我想知道为什么我会得到这个错误,我应该如何解决这个问题?

iecba09b

iecba09b1#

  • 调用net.Listen函数时,需要更新第一个参数(行:l, := net.Listen("http", "localhost:49219") .
  • 必须是tcptcp4tcp6unixunixpacket,而不是http
  • 对于IPv4,可以使用tcp4
    示例:
l, err := net.Listen("tcp4", "localhost:49219")
if err != nil {
  // handle error here
}
svr := httptest.NewUnstartedServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { ... }))
svr.Listener.Close()
svr.Listener = l
svr.Start()

相关问题