golang socket地址问题

发布于 2022-09-05 15:37:53 字数 452 浏览 18 评论 0

golang socket TCP连接 定义了一个全局map

var conns map[string]net.Conn

保存Accept的net.Conn

conns[conn.RemoteAddr().String()] = conn
log.Println("conns", conns)
for k, v := range conns {
    log.Println(k, v)
}

问题是:log的conns数组和range conns的结果不一样?求解释。

clipboard.png

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

如此安好 2022-09-12 15:37:53

仔细看后面的&

试试

conns[conn.RemoteAddr().String()] = conn
log.Println("conns", conns)
for k, v := range conns {
    log.Println(k, *v)
}
寒尘 2022-09-12 15:37:53
    conns[conn.RemoteAddr().String()] = conn
    log.Println("conns", conns) // fmt.Sprintln判断map conns的v的类型是接口,不进行递归打印

    log.Printf("%p\n", conn.(*net.TCPConn))
    log.Printf("%+v\n", conn.(*net.TCPConn))

    for k, v := range conns {
        log.Println(k, v) // 在这里fmt.Sprintln判断v的底层类型是Struct,而进行了递归打印
    }

再具体的话可以追踪代码看看,主要代码在fmt package的func (p *pp) printValue(value reflect.Value, verb rune, depth int)函数里.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文