Go 插件每日推薦之 spinner | Go 主題月

你們好,我是 @洛竹git

本文首發於 洛竹的官方網站github

本文同步於公衆號『洛竹早茶館』,轉載請聯繫做者。api

創做不易,養成習慣,素質三連!bash

spinner 是一個簡單的包,能夠向任何終端應用程序中添加一個 spinner /progress 指示器。能夠在下面找到示例,也能夠在 examples 目錄中找到完整的示例。markdown

有關該庫及其功能的更多詳細信息,請在安裝後參考本地的 godoc。app

安裝

go get github.com/briandowns/spinner
複製代碼

可用的字符集

(由其切片索引編號)ide

索引 字符集 GIF
0 ←↖↑↗→↘↓↙ Sample Gif
1 ▁▃▄▅▆▇█▇▆▅▄▃▁ 1.gif
2 ▖▘▝▗ 2.gif
3 ┤┘┴└├┌┬┐ 3.gif
4 ◢◣◤◥ 4.gif
5 ◰◳◲◱ 5.gif
6 ◴◷◶◵ 6.gif
7 ◐◓◑◒ 7.gif
8 .oO@* Sample Gif
9 |/-\ 9.gif
10 ◡◡⊙⊙◠◠ 10.gif
11 ⣾⣽⣻⢿⡿⣟⣯⣷ Sample Gif
12 >))'> >))'> >))'> >))'> >))'> <'((< <'((< <'((< Sample Gif
13 ⠁⠂⠄⡀⢀⠠⠐⠈ 13.gif
14 ⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏ 14.gif
15 abcdefghijklmnopqrstuvwxyz 15.gif
16 ▉▊▋▌▍▎▏▎▍▌▋▊▉ 16.gif
17 ■□▪▫ 17.gif
18 ←↑→↓ 18.gif
19 ╫╪ 19.gif
20 ⇐⇖⇑⇗⇒⇘⇓⇙ Sample Gif
21 ⠁⠁⠉⠙⠚⠒⠂⠂⠒⠲⠴⠤⠄⠄⠤⠠⠠⠤⠦⠖⠒⠐⠐⠒⠓⠋⠉⠈⠈ 21.gif
22 ⠈⠉⠋⠓⠒⠐⠐⠒⠖⠦⠤⠠⠠⠤⠦⠖⠒⠐⠐⠒⠓⠋⠉⠈ Sample Gif
23 ⠁⠉⠙⠚⠒⠂⠂⠒⠲⠴⠤⠄⠄⠤⠴⠲⠒⠂⠂⠒⠚⠙⠉⠁ Sample Gif
24 ⠋⠙⠚⠒⠂⠂⠒⠲⠴⠦⠖⠒⠐⠐⠒⠓⠋ 24.gif
25 ヲァィゥェォャュョッアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワン 25.gif
26 . .. ... 26.gif
27 ▁▂▃▄▅▆▇█▉▊▋▌▍▎▏▏▎▍▌▋▊▉█▇▆▅▄▃▂▁ 27.gif
28 .oO°Oo. 28.gif
29 +x 29.gif
30 v<^> 30.gif
31 >>---> >>---> >>---> >>---> >>---> <---<< <---<< <---<< <---<< <---<< Sample Gif
32 | || ||| |||| ||||| |||||| ||||| |||| ||| || | Sample Gif
33 [] [=] [==] [===] [====] [=====] [======] [=======] [========] [=========] [==========] Sample Gif
34 (*---------) (-*--------) (--*-------) (---*------) (----*-----) (-----*----) (------*---) (-------*--) (--------*-) (---------*) 34.gif
35 █▒▒▒▒▒▒▒▒▒ ███▒▒▒▒▒▒▒ █████▒▒▒▒▒ ███████▒▒▒ ██████████ 35.gif
36 [ ] [=> ] [===> ] [=====> ] [======> ] [========> ] [==========> ] [============> ] [==============> ] [================> ] [==================> ] [===================>] 36.gif
37 🕐 🕑 🕒 🕓 🕔 🕕 🕖 🕗 🕘 🕙 🕚 🕛 37.gif
38 🕐 🕜 🕑 🕝 🕒 🕞 🕓 🕟 🕔 🕠 🕕 🕡 🕖 🕢 🕗 🕣 🕘 🕤 🕙 🕥 🕚 🕦 🕛 🕧 38.gif
39 🌍 🌎 🌏 39.gif
40 ◜ ◝ ◞ ◟ 40.gif
41 ⬒ ⬔ ⬓ ⬕ 41.gif
42 ⬖ ⬘ ⬗ ⬙ 42.gif
43 [>>> >] []>>>> [] [] >>>> [] [] >>>> [] [] >>>> [] [] >>>>[] [>> >>] 43.gif

特性

  • 開始
  • 中止
  • 重啓
  • 反轉方向
  • 更新 spinner 字符集
  • 更新 spinner 速度
  • 前綴或者後綴文字
  • 修改 spinner 顏色、背景色和文字屬性
  • 獲取 spinner 狀態
  • 鏈,管道,重定向輸出
  • 在 spinner 完成時輸出最終字符串

示例

package main

import (
	"github.com/briandowns/spinner"
	"time"
)

func main() {
	s := spinner.New(spinner.CharSets[9], 100*time.Millisecond)  // 構建新的 spinner
	s.Start()                                                    // 開始
	time.Sleep(4 * time.Second)                                  // 模擬真實的工做
	s.Stop()
}
複製代碼

更新字符集並重啓 spinner

s.UpdateCharSet(spinner.CharSets[1])  // 用不一樣的字符集更新 spinner
s.Restart()                           // 重啓 spinner
time.Sleep(4 * time.Second)
s.Stop()
複製代碼

更新旋轉速度並從新啓動微調器

s.UpdateSpeed(200 * time.Millisecond) // 更新 spinner 轉動的速度
s.Restart()
time.Sleep(4 * time.Second)
s.Stop()
複製代碼

反轉 spinner 旋轉的方向

s.Reverse() // 反轉 spinner 旋轉的方向
s.Restart()
time.Sleep(4 * time.Second)
s.Stop()
複製代碼

提供你本身的 spinner

或者給我發送一個 issue 或者 pull request 添加到項目裏。oop

someSet := []string{"+", "-"}
s := spinner.New(someSet, 100*time.Millisecond)
複製代碼

spinner 的前綴和後綴文字

s.Prefix = "prefixed text: " // spinner 前綴
s.Suffix = " :appended text" // spinner 後綴
複製代碼

設置或改變 spinner 的顏色

默認顏色是 white。spinner 須要重啓來應用改變。網站

s.Color("red") // 設置 spinner 顏色爲 red
複製代碼

您能夠同時指定背景色和前景色,以及其餘屬性,例如 bold underlinespa

s.Color("red", "bold") // Set the spinner color to a bold red 設置 spinner 爲粗體紅色
複製代碼

或將背景設置爲黑色,將前景設置爲粗體紅色:

s.Color("bgBlack", "bold", "fgRed")
複製代碼

下面是完整的 color 和屬性列表:

// default colors
red
black
green
yellow
blue
magenta
cyan
white

// attributes
reset
bold
faint
italic
underline
blinkslow
blinkrapid
reversevideo
concealed
crossedout

// foreground text
fgBlack
fgRed
fgGreen
fgYellow
fgBlue
fgMagenta
fgCyan
fgWhite

// foreground Hi-Intensity text
fgHiBlack
fgHiRed
fgHiGreen
fgHiYellow
fgHiBlue
fgHiMagenta
fgHiCyan
fgHiWhite

// background text
bgBlack
bgRed
bgGreen
bgYellow
bgBlue
bgMagenta
bgCyan
bgWhite

// background Hi-Intensity text
bgHiBlack
bgHiRed
bgHiGreen
bgHiYellow
bgHiBlue
bgHiMagenta
bgHiCyan
bgHiWhite
複製代碼

生成數字序列

setOfDigits := spinner.GenerateNumberSequence(25)  // 生成25位數字的字符串
s := spinner.New(setOfDigits, 100*time.Millisecond)
複製代碼

獲取 spinner 狀態

fmt.Println(s.Active())
複製代碼

Unix管道和重定向

dekz 建議並撰寫的功能

將 Spinner Writer 設置爲 Stderr 能夠加強向鏈,管道或重定向輸出的功能,從而向用戶顯示進度。

這是此時設置 Writer 的首選方法。

s := spinner.New(spinner.CharSets[11], 100*time.Millisecond, spinner.WithWriter(os.Stderr))
s.Suffix = " Encrypting data..."
s.Start()
// Encrypt the data into ciphertext
fmt.Println(os.Stdout, ciphertext)
複製代碼
> myprog encrypt "Secret text" > encrypted.txt
⣯ Encrypting data...
複製代碼
> cat encrypted.txt
1243hjkbas23i9ah27sj39jghv237n2oa93hg83
複製代碼

最終字符串輸出

spinner/indicator 完成後添加其餘輸出。最終輸出字符串能夠是多行的,並將被寫入配置了 io.Writer 的任何地方。

s := spinner.New(spinner.CharSets[9], 100*time.Millisecond)
s.FinalMSG = "Complete!\nNew line!\nAnother one!\n"
s.Start()                 
time.Sleep(4 * time.Second)
s.Stop()                   
複製代碼

輸出:

Complete!
New line!
Another one!
複製代碼
相關文章
相關標籤/搜索