gpt4 book ai didi

go - Go 的 net.Listener Addr() 有什么用?

转载 作者:IT王子 更新时间:2023-10-29 01:48:44 24 4
gpt4 key购买 nike

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com