go - 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)
}
}
}
我无法在 Write 函数中添加换行符,因为这将导致它在每个字节被推送到写入器后换行。有没有一种巧妙的方法可以做到这一点?
编辑:我想要在进度条之后和下一行打印出来之前的新行
解决方案
您所问问题的简单答案是在进度条完成后打印一个额外的换行符:
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
}
尽管您的评论表明这是有问题的,但您还没有解释如何。如果您更新您的问题以解释为什么这是一个问题,也许可以找到更好的解决方案。
推荐阅读
- kanban - 如果我的价值流是先开发后测试,我如何为先编写测试的开发人员建模?
- android - 如何从android中的firebase检索listview中的嵌套数据
- angular - 带值的 Angular 属性组件
- xcode - 显示键盘时向上或向下移动视图
- javascript - Javascript - 从 esp8266 SPIFFS 读取 Json
- javascript - 统计在线会员
- spring - Spring Boot,我什至需要一个带有 vuejs 的模型吗?
- android - 在 Android 上使用 algolia 使 Firebase 实时数据库可搜索
- mongodb - 使用 Mongoose 保存时的 JSON 格式无法恢复预期结果
- recursion - 如何制作将相同命令应用于子目录的单个makefile?