Golang中实现终端进度条展示功能

207 阅读1分钟

引言

在许多应用场景下我们对于程序中执行的进度并不了解,可以通过一些标记打点可以做到打点来进行观察,但还是不太直观,接下里我们可以引入一个封装好的包并快速的兼容所需程序中用到的进度条功能

步骤

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()
}

以上就是关于进度条的全部内容啦