1. 首页
  2. 主题
  3. Go问与答

fmt.printf 为什么能输出整个缓冲数据?

junliuxian · · 1841 次点击
> 我尝试使用 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 } ```
windy_
君子知命不惧,日日自省
``` func (l *Logger) Output(calldepth int, s string) error { .... if len(s) == 0 || s[len(s)-1] != '\n' { l.buf = append(l.buf, '\n') } .... } ``` 无非就是log.Printf自动加了换行,fmt.Printf没加,你在fmt.Printf后加一个fmt.println,它们就一样了
#9
更多评论
polaris
社区,需要你我一同完善!
`fmt.Printf` 是输出到 `os.Stdout`,它是行缓冲的,而 `log.Printf` 是输出到 `os.Stderr`,这是无缓冲的。所以有这个差异!
#1
我感觉不像是 fmt 与 log 的问题,如果是设置了缓冲区,每次打印不会超过这个值。另外怎么还有 this 这种操作
#2

用户登录

没有账号?注册

今日阅读排行

    加载中

一周阅读排行

    加载中