【发布时间】:2019-11-07 02:42:18
【问题描述】:
我有以下代码使用a package 来绘制进度条
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 函数中添加换行符,因为这会在每个字节推送到写入器后导致它换行。有没有一种巧妙的方法可以做到这一点?
编辑: 我希望新行在进度条之后和下一行打印出来之前
【问题讨论】:
-
@Volker:我的猜测:对
tmpStruct does not implement io.Writer (Write method has pointer receiver)的一个考虑不周的回应 -
所以你想在状态栏后换行吗?那么,为什么不在状态栏之后打印一个换行符呢?
-
重复是程序员最擅长的。编写一个函数来为您处理它。我没有发现任何问题。
-
我投了反对票,因为这个问题很不清楚。我没有看到明确的问题陈述。我看到一个很小的图形,我猜它表明了一个未指明的不正确行为(在 cmets 之后,我认为我理解了意图)。
-
这也不是真正的最小复制案例。事实上,它的代码比必要的多(考虑到不必要的
tmpStruct类型和不必要的类型断言),同时代码也不够多,因为那里没有完整的可执行示例来演示故障模式。