###### tags: `Golang Package` # Progressbar ## Intro 就是一個bra條。 ![](https://i.imgur.com/ASmLKeT.png) ### Useage 1 有已知長度的預設進度條 ``` go= bar := progressbar.Default(100) for i := 0; i < 100; i++ { bar.Add(1) time.Sleep(40 * time.Millisecond) } ``` ![](https://i.imgur.com/ZeJHbPi.gif) ### Useage 2 無已知長度的進度條,只需將參數設為 -1 ``` go= bar := progressbar.Default(-1) for i := 0; i < 100; i++ { bar.Add(1) time.Sleep(40 * time.Millisecond) } ``` ![](https://i.imgur.com/jztuCWM.gif) ### Usecase 3 可使用於下載檔案的場景,會顯示相應的下載速度,由resp提供長度,如無法得知長度,可使用Useage 2的方法 ``` go= req, _ := http.NewRequest("GET", "https://dl.google.com/go/go1.14.2.src.tar.gz", nil) resp, _ := http.DefaultClient.Do(req) defer resp.Body.Close() bar := progressbar.DefaultBytes( resp.ContentLength, "downloading", ) io.Copy(io.MultiWriter(bar), resp.Body) ``` ![](https://i.imgur.com/OzTeQAY.gif) https://github.com/schollz/progressbar ### Usecase 4 自訂進度條,可自訂項目如下所示 ``` go= // 設置寬度 OptionSetWidth(100) // 未知長度的圖案顯示類型 0~75可選 ex:⦿、▹▹▹▹▸ OptionSpinnerType(int) // 進度條樣式 OptionSetTheme(Theme{ // 進度條已完成的部分,顏色部分就是colorstring Saucer: "[red]-[reset]", // 進度條的頭 SaucerHead: "[red]>[reset]", // 進度條還沒到的地方的樣式 SaucerPadding: " ", // 進度條左邊框框 BarStart: "<", // 進度條右邊框框 BarEnd: ">", }) // 設置進度條是否可見 false:不可見 OptionSetVisibility(bool) // 自適應最大長度,建議使用,否則當進度條寬度大於終端視窗時會出現進度條殘影 OptionFullWidth() // 設置輸出樣式,沒感覺有什麼特別用處,可輸入os.Stderr / 預設os.Stdout OptionSetWritter(io.writer) // 是否要顯示0%的bar條 OptionSetRenderBlankState(bool) // 設置bar條前的敘述 OptionSetDescription(string) // 是否要啟用bar條顏色,colorstring OptionEnableColorCodes(bool) // 是否要顯示預測時間 OptionSetPredictTime(bool) // 顯示 當前數/總數 OptionShowCount() // 顯示每秒運行次數 OptionShowIts() // 顯示每秒運行的單位, ex:筆/s、個/s OptionSetItsString(string) // bar條更新的間隔時間 OptionThrottle(time.Duration) // 完成時清除bar條,有bug 沒用 OptionClearOnFinish() // 完成後調用指定函式 OptionOnCompletion(func()) // 是否顯示Byte進度 (0.125 kB/s) OptionShowBytes(bool) // 使用ANSICode,用途不明 OptionUseANSICodes(bool) ``` 額外補充[Colorstring](https://github.com/mitchellh/colorstring) 有以上自訂項目,就可以做到以下顯示 ``` go= bar := progressbar.NewOptions64(length, //progressbar.OptionSetWriter(), // 是否要顯示顏色 progressbar.OptionEnableColorCodes(true), // 設置bar條長度 progressbar.OptionSetWidth(50), // 設置title progressbar.OptionSetDescription("正在轉換資料中..."), // 設置bar條樣式 progressbar.OptionSetTheme(progressbar.Theme{ // 進度條樣式 Saucer: "[yellow]-[reset]", // 進度條的頭 SaucerHead: "[yellow]─=≡Σ((つ•̀ω•́)つ[reset]", // 進度條還沒到的地方的樣式 SaucerPadding: " ", // 進度條左邊框框 BarStart: "[", // 進度條右邊框框 BarEnd: "]", }), progressbar.OptionFullWidth(), progressbar.OptionShowIts(), progressbar.OptionSetItsString("筆"), ) ``` ![](https://i.imgur.com/MNyPRrr.gif) {%hackmd theme-dark %}