引言
在许多应用场景下我们对于程序中执行的进度并不了解,可以通过一些标记打点可以做到打点来进行观察,但还是不太直观,接下里我们可以引入一个封装好的包并快速的兼容所需程序中用到的进度条功能
步骤
1.引入包
require github.com/Qianud/golang-gressbar v1.0.0
2.主程序引用
bar := Init() bar.NewOption(0,8)
for i:=1;i<=8;i++{
bar.Play(int64(i))
time.Sleep(100*time.Millisecond)
}
通过以上两个步骤我们就可以实现进度条功能啦,以下是关于进度条的源代码与分析
源代码
package gobar
import "fmt"
type Bar struct {
totalValue int64
currValue int64
graph string
rate string
}
//初始化该方法
func Init() *Bar {
bar := new(Bar)
return bar
}
//进度条主程序
func (bar *Bar) NewOption(start, totalValue int64) *Bar {
bar.currValue = start
bar.totalValue = totalValue
if bar.graph == "" {
bar.graph = "█"
}
return bar
}
//可定制进度条样式
func (bar *Bar) NewOptionWithGraph(start, total int64, graph string) {
bar.graph = graph
bar.NewOption(start, total)
}
/**
*/
func (bar *Bar) Play(value int64) {
val := float64(bar.totalValue) / 50
prePercent := int32(float64(bar.currValue) / val)
nowPercent := int32(float64(value) / val)
for i := prePercent + 1; i <= nowPercent; i++ {
bar.rate += bar.graph
}
bar.currValue = value
fmt.Printf("\r[%-50s]%0.2f%% %8d/%d", bar.rate, float64(bar.currValue)/float64(bar.totalValue)*100,
bar.currValue, bar.totalValue)
}
/**
完成调用
*/
func (bar *Bar) Finish() {
val := float64(bar.totalValue) / 50
prePercent := int32(float64(bar.currValue) / val)
for i := prePercent + 1; i <= 50; i++ {
bar.rate += bar.graph
}
bar.currValue = bar.totalValue
fmt.Printf("\r[%-50s]%0.2f%% %8d/%d", bar.rate, float64(bar.currValue)/float64(bar.totalValue)*100,
bar.currValue, bar.totalValue)
fmt.Println()
}
func (bar *Bar) Stop() {
fmt.Println()
}
以上就是关于进度条的全部内容啦