Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package bar
- import (
- "fmt"
- )
- const Template = "[%s] %3d%%"
- type ProgressBar struct {
- template string
- str string
- curChars int
- totalChars int
- percentage int
- itt int
- }
- func NewProgressBar(totalChars int) *ProgressBar {
- b := ProgressBar{}
- b.template = Template
- b.curChars = 0
- b.totalChars = totalChars
- b.str = ""
- return &b
- }
- func (b *ProgressBar) Reset() {
- b.curChars = 0
- b.updateNumbers()
- b.Update()
- }
- func (b *ProgressBar) Done() {
- b.curChars = 0
- fmt.Println("")
- }
- func (b *ProgressBar) SetTemplate(template string) {
- b.template = template
- b.updateNumbers()
- b.Update()
- }
- func (b *ProgressBar) SetTotalChars(total int) {
- b.totalChars = total
- b.updateNumbers()
- b.Update()
- }
- func (b *ProgressBar) SetPercentage(percentage int) {
- b.percentage = percentage
- if percentage > 100 {
- b.percentage = 100
- }
- b.updateNumbers()
- b.Update()
- }
- func (b *ProgressBar) updateNumbers() {
- floatPercentage := float64(b.percentage) / 100
- floatChars := float64(b.totalChars)
- b.curChars = int(floatChars * floatPercentage)
- }
- func (b *ProgressBar) Update() {
- restCount := b.totalChars - b.curChars
- out := ""
- var i int
- for i = 0; i < b.curChars; i++ {
- out += "#"
- }
- for i = 0; i < restCount; i++ {
- out += "."
- }
- fmt.Printf(b.template+"\r", out, b.percentage)
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement