Golang 터미널 스피너 Spinner 라이브러리 알아보기

오늘은 Golang으로 터미널에 스피너나 진행률을 표시할 수 있는 Spinner 라이브러리를 알아보려 합니다.

Spinner 설치

우선 Golang의 환경을 구성하기 위해 https://golang.org/dl/ 에서 윈도우, 리눅스, 맥에서 설치 프로그램을 내려받을 수 있습니다.

맥에서 brew로 쉽게 설치할 수 있습니다.

brew install go

우분투에서도 apt로 쉽게 설치할 수 있습니다.

sudo apt-get install golang-go

맥에서 Golang의 버전을 올리려면 brew를 이용합니다.

brew upgrade go

우분투에서도 Golang의 버전을 올리려면 backports 저장소를 등록하고 apt를 이용합니다.

sudo add-apt-repository ppa:longsleep/golang-backports
sudo apt-get update
sudo apt-get install golang-go

go get으로 Spinner 패키지를 설치합니다.

go get github.com/briandowns/spinner

홈의 go 폴더에 Spinner 소스코드와 패키지 파일이 생성됩니다.

예제

package main

해당 소스코드를 실행 파일로 인식하게 해주도록 main이라고 선언합니다.

import (
	"fmt"
	"time"

	"github.com/briandowns/spinner"
)

fmt, time 그리고 spinner를 가져옵니다.

func main() {
	spinnerInstance := spinner.New(spinner.CharSets[9], 100*time.Millisecond)
	spinnerInstance.Start()
	time.Sleep(2 * time.Second)
	spinnerInstance.Stop()

원하는 Character Sets로 Spinner 객체를 생성하고, 인디케이터로 스피너를 작동/중지합니다.

	spinnerInstance.Reverse()
	spinnerInstance.Restart()
	time.Sleep(2 * time.Second)
	spinnerInstance.Stop()

스피너를 거꾸로 작동합니다.

	spinnerInstance.UpdateCharSet(spinner.CharSets[36])
	spinnerInstance.Restart()
	time.Sleep(2 * time.Second)
	spinnerInstance.Stop()

원하는 Character Sets로 갱신합니다.

	spinnerInstance.UpdateSpeed(1 * time.Millisecond)
	spinnerInstance.Restart()
	time.Sleep(2 * time.Second)
	spinnerInstance.Stop()

원하는 속도로 갱신합니다.

	cs := []string{"o", "O"}
	spinnerInstance = spinner.New(cs, 100*time.Millisecond)
	spinnerInstance.Start()
	time.Sleep(2 * time.Second)
	spinnerInstance.Stop()

기존 Character Sets를 대신하여 Spinner 객체를 생성합니다.

	spinnerInstance.Prefix = "prefix: "
	spinnerInstance.Suffix = " :suffix"
	spinnerInstance.Start()
	time.Sleep(2 * time.Second)
	spinnerInstance.Stop()

Spinner에 접두사와 접미사에 원하는 텍스트를 넣습니다.

	spinnerInstance.Color("blue", "bold")
	spinnerInstance.Start()
	time.Sleep(2 * time.Second)
	spinnerInstance.Stop()

Spinner에 색상과 스타일을 지정합니다.

	cs = spinner.GenerateNumberSequence(10)
	spinnerInstance = spinner.New(cs, 100*time.Millisecond)
	spinnerInstance.Start()
	time.Sleep(2 * time.Second)
	fmt.Println(spinnerInstance.Active())
	spinnerInstance.Stop()

Active로 현재 Spinner 객체가 작동 중인지 확인합니다.

	spinnerInstance = spinner.New(spinner.CharSets[9], 100*time.Millisecond)
	spinnerInstance.FinalMSG = "first line\nsecond line\n"
	spinnerInstance.Start()
	time.Sleep(2 * time.Second)
	spinnerInstance.Stop()
}

Spinner 객체가 동작을 끝내면 출력할 문자열을 지정합니다.

Written on November 18, 2019