你們好,我是 @洛竹git
本文首發於 洛竹的官方網站github
本文同步於公衆號『洛竹早茶館』,轉載請聯繫做者。api
創做不易,養成習慣,素質三連!bash
spinner 是一個簡單的包,能夠向任何終端應用程序中添加一個 spinner /progress 指示器。能夠在下面找到示例,也能夠在 examples 目錄中找到完整的示例。markdown
有關該庫及其功能的更多詳細信息,請在安裝後參考本地的 godoc。app
go get github.com/briandowns/spinner
複製代碼
(由其切片索引編號)ide
索引 | 字符集 | GIF |
---|---|---|
0 | ←↖↑↗→↘↓↙ |
|
1 | ▁▃▄▅▆▇█▇▆▅▄▃▁ |
|
2 | ▖▘▝▗ |
|
3 | ┤┘┴└├┌┬┐ |
|
4 | ◢◣◤◥ |
|
5 | ◰◳◲◱ |
|
6 | ◴◷◶◵ |
|
7 | ◐◓◑◒ |
|
8 | .oO@* |
|
9 | |/-\ |
|
10 | ◡◡⊙⊙◠◠ |
|
11 | ⣾⣽⣻⢿⡿⣟⣯⣷ |
|
12 | >))'> >))'> >))'> >))'> >))'> <'((< <'((< <'((< |
|
13 | ⠁⠂⠄⡀⢀⠠⠐⠈ |
|
14 | ⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏ |
|
15 | abcdefghijklmnopqrstuvwxyz |
|
16 | ▉▊▋▌▍▎▏▎▍▌▋▊▉ |
|
17 | ■□▪▫ |
|
18 | ←↑→↓ |
|
19 | ╫╪ |
|
20 | ⇐⇖⇑⇗⇒⇘⇓⇙ |
|
21 | ⠁⠁⠉⠙⠚⠒⠂⠂⠒⠲⠴⠤⠄⠄⠤⠠⠠⠤⠦⠖⠒⠐⠐⠒⠓⠋⠉⠈⠈ |
|
22 | ⠈⠉⠋⠓⠒⠐⠐⠒⠖⠦⠤⠠⠠⠤⠦⠖⠒⠐⠐⠒⠓⠋⠉⠈ |
|
23 | ⠁⠉⠙⠚⠒⠂⠂⠒⠲⠴⠤⠄⠄⠤⠴⠲⠒⠂⠂⠒⠚⠙⠉⠁ |
|
24 | ⠋⠙⠚⠒⠂⠂⠒⠲⠴⠦⠖⠒⠐⠐⠒⠓⠋ |
|
25 | ヲァィゥェォャュョッアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワン |
|
26 | . .. ... |
|
27 | ▁▂▃▄▅▆▇█▉▊▋▌▍▎▏▏▎▍▌▋▊▉█▇▆▅▄▃▂▁ |
|
28 | .oO°Oo. |
|
29 | +x |
|
30 | v<^> |
|
31 | >>---> >>---> >>---> >>---> >>---> <---<< <---<< <---<< <---<< <---<< |
|
32 | | || ||| |||| ||||| |||||| ||||| |||| ||| || | |
|
33 | [] [=] [==] [===] [====] [=====] [======] [=======] [========] [=========] [==========] |
|
34 | (*---------) (-*--------) (--*-------) (---*------) (----*-----) (-----*----) (------*---) (-------*--) (--------*-) (---------*) |
|
35 | █▒▒▒▒▒▒▒▒▒ ███▒▒▒▒▒▒▒ █████▒▒▒▒▒ ███████▒▒▒ ██████████ |
|
36 | [ ] [=> ] [===> ] [=====> ] [======> ] [========> ] [==========> ] [============> ] [==============> ] [================> ] [==================> ] [===================>] |
|
37 | 🕐 🕑 🕒 🕓 🕔 🕕 🕖 🕗 🕘 🕙 🕚 🕛 |
|
38 | 🕐 🕜 🕑 🕝 🕒 🕞 🕓 🕟 🕔 🕠 🕕 🕡 🕖 🕢 🕗 🕣 🕘 🕤 🕙 🕥 🕚 🕦 🕛 🕧 |
|
39 | 🌍 🌎 🌏 |
|
40 | ◜ ◝ ◞ ◟ |
|
41 | ⬒ ⬔ ⬓ ⬕ |
|
42 | ⬖ ⬘ ⬗ ⬙ |
|
43 | [>>> >] []>>>> [] [] >>>> [] [] >>>> [] [] >>>> [] [] >>>>[] [>> >>] |
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()
}
複製代碼
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()
複製代碼
s.Reverse() // 反轉 spinner 旋轉的方向
s.Restart()
time.Sleep(4 * time.Second)
s.Stop()
複製代碼
或者給我發送一個 issue 或者 pull request 添加到項目裏。oop
someSet := []string{"+", "-"}
s := spinner.New(someSet, 100*time.Millisecond)
複製代碼
s.Prefix = "prefixed text: " // spinner 前綴
s.Suffix = " :appended text" // spinner 後綴
複製代碼
默認顏色是 white。spinner 須要重啓來應用改變。網站
s.Color("red") // 設置 spinner 顏色爲 red
複製代碼
您能夠同時指定背景色和前景色,以及其餘屬性,例如 bold
或 underline
。spa
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)
複製代碼
fmt.Println(s.Active())
複製代碼
由 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!
複製代碼