gpt4 book ai didi

go - 当它可能是 net.UDPAddr 或 net.TCPAddr 时如何从 net.Addr 获取 IP 和端口

转载 作者:IT王子 更新时间:2023-10-29 01:34:45 28 4
gpt4 key购买 nike

我正在运行一个同时监听 TCP 和 UDP 的混合服务器,并且需要获取本地端口、远程 IP 地址和远程端口。目前我检查底层类型是 net.UDPAddr 还是 net.TCPAddr 的方式如下:

// BAD: but not sure a better way
switch reflect.TypeOf(remoteAddr).String() {
case "*net.UDPAddr":
p.SrcIP = remoteAddr.(*net.UDPAddr).IP.String()
p.SrcPort = uint(remoteAddr.(*net.UDPAddr).Port)
p.DstPort = uint(localAddr.(*net.UDPAddr).Port)
case "*net.TCPAddr":
p.SrcIP = remoteAddr.(*net.TCPAddr).IP.String()
p.SrcPort = uint(remoteAddr.(*net.TCPAddr).Port)
p.DstPort = uint(localAddr.(*net.TCPAddr).Port)
}

我不是这个的最大粉丝,如果有人有任何看起来更干净的解决方案,我将不胜感激

最佳答案

无需反射,只需进行适当的类型断言切换即可:

switch addr := remoteAddr.(type) {
case *net.UDPAddr:
p.SrcIP = addr.IP.String()
p.SrcPort = uint(addr.Port)
p.DstPort = uint(localAddr.(*net.UDPAddr).Port)
case *net.TCPAddr:
p.SrcIP = addr.IP.String()
p.SrcPort = uint(addr.Port)
p.DstPort = uint(localAddr.(*net.TCPAddr).Port)
}

关于go - 当它可能是 net.UDPAddr 或 net.TCPAddr 时如何从 net.Addr 获取 IP 和端口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50428176/

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