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

我有以下代码,使用包来绘制进度条

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)

        }

    }

}

一切正常,除了最后没有换行,正如您在此处看到的那样 

http://img1.sycdn.imooc.com/6499578c0001c69a22220055.jpg

我无法在 Write 函数中添加新行字符,因为这会导致在将每个字节推送到写入器后将其添加到新行。有什么巧妙的方法可以做到这一点吗?

编辑:我想要在进度条之后和下一行打印之前添加新行


米脂
浏览 217回答 1
1回答

噜噜哒

您所问问题的简单答案就是在进度条完成后打印一个额外的换行符: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}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go