【发布时间】:2018-04-16 13:12:43
【问题描述】:
我正在编写一个测试,我希望 HTTP 服务器侦听随机端口,然后连接到该端口。我写道:
mux := http.NewServeMux()
mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
fmt.Println("foo")
})
listener, err := net.Listen("tcp", ":0")
fmt.Println(err)
httpServer := &http.Server{Handler: mux}
go httpServer.Serve(listener)
fmt.Println("http://" + listener.Addr().String())
r, err := http.Get("http://" + listener.Addr().String())
fmt.Println(r)
fmt.Println(err)
本打算写net.Listen("tcp", "127.0.0.1:0"),却不小心写了net.Listen("tcp", ":0")。
对于"http://" + listener.Addr().String(),它会打印:
http://[::]:1709
据我了解,“括号冒号冒号括号”表示“所有接口”。
令我惊讶的是,http.Get("http://[::]:1709") 工作正常,它连接到网络服务器并打印“foo”。
“http://[::]:1709”如何是有效地址?
【问题讨论】: