为了账号安全,请及时绑定邮箱和手机立即绑定

golang io.writer 写完字符串后换行

golang io.writer 写完字符串后换行

Go
米脂 2023-06-26 17:16:18
我有以下代码,使用包来绘制进度条type tmpStruct struct {}func (t *tmpStruct) Write(p []byte) (n int, err error) {    fmt.Fprintf(os.Stdout, "%s", string(p))    return len(p), nil}func demoLoadingBarCount(maximumInt int) {    buf := tmpStruct{}    if nBuf, ok := interface{}(&buf).(io.Writer); ok {        bar := progressbar.NewOptions(            maximumInt,            progressbar.OptionSetTheme(progressbar.Theme{Saucer: "█", SaucerPadding: "-", BarStart: ">", BarEnd: "<"}),            progressbar.OptionSetWidth(100),            progressbar.OptionSetWriter(nBuf),        )        for i := 0; i < maximumInt; i++ {            bar.Add(1)            time.Sleep(10 * time.Millisecond)        }    }}一切正常,除了最后没有换行,正如您在此处看到的那样 我无法在 Write 函数中添加新行字符,因为这会导致在将每个字节推送到写入器后将其添加到新行。有什么巧妙的方法可以做到这一点吗?编辑:我想要在进度条之后和下一行打印之前添加新行
查看完整描述

1 回答

?
噜噜哒

TA贡献1784条经验 获得超7个赞

您所问问题的简单答案就是在进度条完成后打印一个额外的换行符:


func demoLoadingBarCount(maximumInt int) {

    buf := &tmpStruct{}

    bar := progressbar.NewOptions(

        maximumInt,

        progressbar.OptionSetTheme(progressbar.Theme{Saucer: "█", SaucerPadding: "-", BarStart: ">", BarEnd: "<"}),

        progressbar.OptionSetWidth(100),

        progressbar.OptionSetWriter(buf),

    )

    for i := 0; i < maximumInt; i++ {

        bar.Add(1)

        time.Sleep(10 * time.Millisecond)

    }

    fmt.Fprintf(buf, "\n") // <---- Add this

}

查看完整回答
反对 回复 2023-06-26
  • 1 回答
  • 0 关注
  • 208 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信