Go 的 net.Listener
界面看起来像这样:
type Listener interface {
// Accept waits for and returns the next connection to the listener.
Accept() (Conn, error)
// Close closes the listener.
// Any blocked Accept operations will be unblocked and return errors.
Close() error
// Addr returns the listener's network address.
Addr() Addr
}
但是 Addr
实际上是用来做什么的呢?如果我必须实现自己的监听器,它只返回一个空的 Addr().String()
但可以正常接受和关闭连接,那会有什么影响?
最佳答案
某些网络协议(protocol)允许您创建一个监听随机地址的监听器。当你想同时运行服务的多个实例时,通常会使用这种方法,因此你不能让它们都监听同一个地址。在这些情况下,内核会找到一个可用的,并将您的监听器放在那里。但是一旦你有了一个随机地址,你就需要知道那个地址是什么,这样你才能为它做广告。
例如,对于 TCP 和 UDP,您可以指定 0
作为您的端口号:
package main
import (
"fmt"
"net"
)
func main() {
l, _ := net.Listen("tcp4", ":0")
fmt.Printf("Addr: %s\n", l.Addr())
}
结果类似于:
Addr: 0.0.0.0:37733
关于go - Go 的 net.Listener Addr() 有什么用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50780921/