这是我的代码:
package main
import (
"fmt"
"os"
"path/filepath"
"github.com/gosuri/uilive"
)
var writer = uilive.New()
const kb = 1024.00
func main() {
writer.Start()
// start listening for updates and render
dirSize(os.Args[1])
writer.Stop()
}
func dirSize(path string) (float64, error) {
// todo check if path exists
var size float64
err := filepath.Walk(path, func(_ string, info os.FileInfo, err error) error {
if !info.IsDir() {
size += float64(info.Size())
fmt.Fprintf(writer, "Size: %f GB\n", size/(kb*kb*kb))
}
return err
})
return size, err
}
Run Code Online (Sandbox Code Playgroud)
你可以抓住uilive:
go get github.com/gosuri/uilive
Run Code Online (Sandbox Code Playgroud)
代码在$ GOPATH/diskusage中.当我运行它时:
go build && ./diskusage "/Users/clint/Music"
Run Code Online (Sandbox Code Playgroud)
这是它的样子(在多行输出):
这是我希望它看起来像在同一行上的输出:
uilive.Writer代码看起来像是线程安全的:https: //github.com/gosuri/uilive/blob/master/writer.go
我不明白为什么它只能写入一行时输出多行.
有人有主意吗?
该包的文档状态
[uilive]提供了一个以定时间隔刷新的缓冲io.Writer.
您只是写入比刷新输出缓冲区更快.如果希望在每次写入Flush()后刷新缓冲区,请在每次写入后调用.
fmt.Fprintf(writer, "Size: %f GB\n", size/(kb*kb*kb))
writer.Flush()
Run Code Online (Sandbox Code Playgroud)