package tools import ( "fmt" "time" "golang.org/x/term" ) func DisplayProgressBar(current, total *int) { // ターミナルのサイズを取得 terminalWidth, _, err := term.GetSize(0) if err != nil { terminalWidth = 80 } width := terminalWidth - 12 // ターミナルの幅を最大100として調整 if width > 100 { width = 100 } for { progress := int(float64(*current) / float64(*total) * float64(width)) // バーの描画 bar := "" for j := 0; j < width; j++ { if j < progress { bar += "=" } else { bar += " " } } // カーソルを行の先頭に戻して上書き fmt.Printf("\r[%s] %d/%d", bar, *current, *total) if *current >= *total { fmt.Println("") break } time.Sleep(20 * time.Millisecond) } }