今天给大家推荐的是在终端(terminal)下能够显示进度条的工具:uiprogress。先看下使用该包的效果图:
相信大家在linux或mac终端上都下载过东西,然后会出现下载的进度条。今天我们就给大家分析下实现原理并演示其效果。
安装
$ go get -v github.com/gosuri/uiprogress
实现原理分析
实现原理其实也很简单,本质上是通过计算机的换码符来实现的。这里使用的就是“清除当前行,将鼠标移动到行首,再重新输出进度”的原理。“清除当前行,将鼠标移动到行首”的换码符是:ESC[1AESC[2K。ESC[1A是代表将鼠标移动到第1行;ESC[2K是代表清除终端上的整行内容。二者组合就能实现上述效果。如下是一个简单的输出百分比的代码:
const ESC = 27
var clear = fmt.Sprintf("%c[%dA%c[2K", ESC, 1, ESC)
var Out = io.Writer(os.Stdout)
func main() {
for i:= 0; i