> 我尝试使用 net 包的客户端接收服务端的数据。但是我发现 fmt.Printf 和 log.Printf 输出的完全不同。缓冲区我是故意设置为 2 的。我的假设传输的数据为: hello world 求大神指点!感激~
```
buff := make([]byte, 2)
for {
count, err := this.conn.Read(buff)
if err != nil {
return
}
fmt.Printf("%s", buff[:count]) // hello world
log.Printf("%s", buff[:count]) // he ll o wo rl d
}
```
package main
import (
//"fmt"
"log"
"strings"
"os"
)
func main() {
log.SetOutput(os.Stdout)
buff := make([]byte, 2)
r := strings.NewReader("hello world")
for {
count, err := r.Read(buff)
if err != nil {
return
}
//fmt.Printf("%s", buff[:count]) // hello world
log.Printf("%s", buff[:count]) // he ll o wo rl d
}
}
2009/11/10 23:00:00 he
2009/11/10 23:00:00 ll
2009/11/10 23:00:00 o
2009/11/10 23:00:00 wo
2009/11/10 23:00:00 rl
2009/11/10 23:00:00 d
#7
更多评论
`fmt.Printf` 是输出到 `os.Stdout`,它是行缓冲的,而 `log.Printf` 是输出到 `os.Stderr`,这是无缓冲的。所以有这个差异!
#1