golangのcliプログラムを作成時、時間がかかる処理を行なっているときに、処理中であることを示すアニメーションを出したい場合がある。
下記のコードでローディング中のくるくる回るスピナーのアニメーションを表示できる。
func main() {
go spinner(100 * time.Millisecond)
// 時間がかかる処理
time.Sleep(5 * time.Second)
fmt.Println("done")
}
func spinner(delay time.Duration) {
for {
for _, r := range `-\|/` {
fmt.Printf("\r%c", r)
time.Sleep(delay)
}
}
}
書籍プログラミング言語Go
、第8章: ゴルーチンとチャネル(p.252)より
こちらもおススメ