1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
| package main
import ( "fmt" "time" )
type Bar struct { percent int64 cur int64 total int64 rate string graph string }
func (bar *Bar) NewOption(start, total int64) { bar.cur = start bar.total = total if bar.graph == "" { bar.graph = "█" } bar.percent = bar.getPercent() for i := 0; i < int(bar.percent); i += 2 { bar.rate += bar.graph } }
func (bar *Bar) getPercent() int64 { return int64(float32(bar.cur) / float32(bar.total) * 100) }
func (bar *Bar) NewOptionWithGraph(start, total int64, graph string) { bar.graph = graph bar.NewOption(start, total) }
func (bar *Bar) Play(cur int64) { bar.cur = cur last := bar.percent bar.percent = bar.getPercent() if bar.percent != last && bar.percent%2 == 0 { bar.rate += bar.graph } fmt.Printf("\r[%-50s]%3d%% %8d/%d", bar.rate, bar.percent, bar.cur, bar.total) }
func (bar *Bar) Finish() { fmt.Println() }
func main() { var bar Bar bar.NewOption(0, 100) for i := 0; i <= 100; i++ { time.Sleep(100 * time.Millisecond) bar.Play(int64(i)) } bar.Finish() }
|