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的结果不一样?求解释。
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的结果不一样?求解释。
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)
函数里.
7 回答5.3k 阅读
6 回答6.9k 阅读✓ 已解决
4 回答2.3k 阅读
1 回答2k 阅读✓ 已解决
1 回答3.4k 阅读
2 回答2.2k 阅读
1 回答2.1k 阅读
仔细看后面的&
试试