spinner

spinner

Go语言实现的终端进度指示器和加载动画库

Spinner是一个Go语言开发的终端动画库,提供90种字符集用于创建加载动画和进度指示器。该库支持自定义动画速度、颜色和文本属性,允许启动、停止和重启动画,添加前缀后缀文本,以及输出最终状态。Spinner主要用于CLI应用程序中展示长时间运行任务的进度,为终端界面增添动态效果。

SpinnerGo语言进度指示器终端应用字符集Github开源项目

加载指示器

GoDoc CircleCI

spinner是一个简单的包,用于在任何终端应用程序中添加加载指示器/进度指示器。下面可以找到示例,完整示例在examples目录中。

有关库及其功能的更多详细信息,安装后请参考本地godoc。

欢迎贡献!

安装

go get github.com/briandowns/spinner

可用字符集

90个字符集。以下是一些示例:

(按其切片索引编号)

索引字符集示例动图
0←↖↑↗→↘↓↙��示例动图
1▁▃▄▅▆▇█▇▆▅▄▃▁示例动图
2▖▘▝▗示例动图
3┤┘┴└├┌┬┐示例动图
4◢◣◤◥示例动图
5◰◳◲◱示例动图
6◴◷◶◵示例动图
7◐◓◑◒示例动图
8.oO@*示例动图
9|/-\示例动图
10◡◡⊙⊙◠◠示例动图
11⣾⣽⣻⢿⡿⣟⣯⣷示例动图
12>))'> >))'> >))'> >))'> >))'> <'((< <'((< <'((<示例动图
13⠁⠂⠄⡀⢀⠠⠐⠈示例动图
14⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏示例动图
15abcdefghijklmnopqrstuvwxyz示例动图
16▉▊▋▌▍▎▏▎▍▌▋▊▉示例动图
17■□▪▫示例动图
18←↑→↓示例动图
19╫╪示例动图
20⇐⇖⇑⇗⇒⇘⇓⇙示例动图
21⠁⠁⠉⠙⠚⠒⠂⠂⠒⠲⠴⠤⠄⠄⠤⠠⠠⠤⠦⠖⠒⠐⠐⠒⠓⠋⠉⠈⠈示例动图
22⠈⠉⠋⠓⠒⠐⠐⠒⠖⠦⠤⠠⠠⠤⠦⠖⠒⠐⠐⠒⠓⠋⠉⠈示例动图
23⠁⠉⠙⠚⠒⠂⠂⠒⠲⠴⠤⠄⠄⠤⠴⠲⠒⠂⠂⠒⠚⠙⠉⠁示例动图
24⠋⠙⠚⠒⠂⠂⠒⠲⠴⠦⠖⠒⠐⠐⠒⠓⠋示例动图
25ヲァィゥェォャュョッアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワン示例动图
26. .. ...示例动图
27▁▂▃▄▅▆▇█▉▊▋▌▍▎▏▏▎▍▌▋▊▉█▇▆▅▄▃▂▁示例动图
28.oO°Oo.示例动图
29+x示例动图
30v<^>示例动图
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) // 构建新的旋转器 s.Start() // 启动旋转器 time.Sleep(4 * time.Second) // 运行一段时间来模拟工作 s.Stop() }

更新字符集并重启旋转器

s.UpdateCharSet(spinner.CharSets[1]) // 更新旋转器以使用不同的字符集 s.Restart() // 重启旋转器 time.Sleep(4 * time.Second) s.Stop()

更新旋转速度并重启旋转器

s.UpdateSpeed(200 * time.Millisecond) // 更新旋转器的旋转速度 s.Restart() time.Sleep(4 * time.Second) s.Stop()

反转旋转器的方向

s.Reverse() // 反转旋转器的旋转方向 s.Restart() time.Sleep(4 * time.Second) s.Stop()

提供自己的旋转器

(或向我提交问题或拉取请求以添加到项目中)

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

在旋转器前缀或附加文本

s.Prefix = "前缀文本: " // 在旋转器之前添加前缀文本 s.Suffix = " :附加文本" // 在旋转器之后附加文本

设置或更改旋转器的颜色。默认颜色为白色。需要重启旋转器以应用更改。

s.Color("red") // 将旋转器颜色设置为红色

您可以同时指定背景色和前景色,以及其他属性如boldunderline

s.Color("red", "bold") // 将旋转器颜色设置为粗体红色

要将背景设置为黑色,前景设置为粗体红色:

s.Color("bgBlack", "bold", "fgRed")

以下是完整的颜色和属性列表:

// 默认颜色 red black green yellow blue magenta cyan white // 属性 reset bold faint italic underline blinkslow blinkrapid reversevideo concealed crossedout // 前景文本 fgBlack fgRed fgGreen fgYellow fgBlue fgMagenta fgCyan fgWhite // 前景高强度文本 fgHiBlack fgHiRed fgHiGreen fgHiYellow fgHiBlue fgHiMagenta fgHiCyan fgHiWhite // 背景文本 bgBlack bgRed bgGreen bgYellow bgBlue bgMagenta bgCyan bgWhite // 背景高强度文本 bgHiBlack bgHiRed bgHiGreen bgHiYellow bgHiBlue bgHiMagenta bgHiCyan bgHiWhite

生成数字序列

setOfDigits := spinner.GenerateNumberSequence(25) // 生成25位数字字符串 s := spinner.New(setOfDigits, 100*time.Millisecond)

获取旋转器状态

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 = " 正在加密数据..." s.Start() // 将数据加密为密文 fmt.Println(os.Stdout, ciphertext)
> myprog encrypt "Secret text" > encrypted.txt ⣯ 正在加密数据...
> cat encrypted.txt 1243hjkbas23i9ah27sj39jghv237n2oa93hg83

最终字符串输出

在旋转器/指示器完成时添加额外输出。"最终"输出字符串可以是多行的,并将写入配置的io.Writer

s := spinner.New(spinner.CharSets[9], 100*time.Millisecond) s.FinalMSG = "完成!\n新行!\n再一行!\n" s.Start() time.Sleep(4 * time.Second) s.Stop()

输出

完成! 新行! 再一行!

编辑推荐精选

GPT Image 2中文站

GPT Image 2中文站

AI 图片生成平台

GPT Image 2 是面向用户的 AI 图片生成平台,支持文生图、图生图及多模型创意工作流。

Nano Banana Pro 中文站

Nano Banana Pro 中文站

AI 图片生成工具

输入简单文字,生成想要的图片。支持Nano Banana/gptimage-2等最新模型。

Vecbase

Vecbase

你的AI Agent团队

Vecbase 是专为 AI 团队打造的智能工作空间,将数据管理、模型协作与知识沉淀整合于一处。算法、产品与业务在同一平台无缝协同,让从数据到 AI 应用的落地更快一步。

音述AI

音述AI

全球首个AI音乐社区

音述AI是全球首个AI音乐社区,致力让每个人都能用音乐表达自我。音述AI提供零门槛AI创作工具,独创GETI法则帮助用户精准定义音乐风格,AI润色功能支持自动优化作品质感。音述AI支持交流讨论、二次创作与价值变现。针对中文用户的语言习惯与文化背景进行专门优化,支持国风融合、C-pop等本土音乐标签,让技术更好地承载人文表达。

QoderWork

QoderWork

阿里Qoder团队推出的桌面端AI智能体

QoderWork 是阿里推出的本地优先桌面 AI 智能体,适配 macOS14+/Windows10+,以自然语言交互实现文件管理、数据分析、AI 视觉生成、浏览器自动化等办公任务,自主拆解执行复杂工作流,数据本地运行零上传,技能市场可无限扩展,是高效的 Agentic 生产力办公助手。

lynote.ai

lynote.ai

一站式搞定所有学习需求

不再被海量信息淹没,开始真正理解知识。Lynote 可摘要 YouTube 视频、PDF、文章等内容。即时创建笔记,检测 AI 内容并下载资料,将您的学习效率提升 10 倍。

AniShort

AniShort

为AI短剧协作而生

专为AI短剧协作而生的AniShort正式发布,深度重构AI短剧全流程生产模式,整合创意策划、制作执行、实时协作、在线审片、资产复用等全链路功能,独创无限画布、双轨并行工业化工作流与Ani智能体助手,集成多款主流AI大模型,破解素材零散、版本混乱、沟通低效等行业痛点,助力3人团队效率提升800%,打造标准化、可追溯的AI短剧量产体系,是AI短剧团队协同创作、提升制作效率的核心工具。

seedancetwo2.0

seedancetwo2.0

能听懂你表达的视频模型

Seedance two是基于seedance2.0的中国大模型,支持图像、视频、音频、文本四种模态输入,表达方式更丰富,生成也更可控。

nano-banana纳米香蕉中文站

nano-banana纳米香蕉中文站

国内直接访问,限时3折

输入简单文字,生成想要的图片,纳米香蕉中文站基于 Google 模型的 AI 图片生成网站,支持文字生图、图生图。官网价格限时3折活动

扣子-AI办公

扣子-AI办公

职场AI,就用扣子

AI办公助手,复杂任务高效处理。办公效率低?扣子空间AI助手支持播客生成、PPT制作、网页开发及报告写作,覆盖科研、商业、舆情等领域的专家Agent 7x24小时响应,生活工作无缝切换,提升50%效率!

下拉加载更多