1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/shirdonl-goProgressor

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

goprogressor

Библиотека на Go для отображения полос прогресса в консольных приложениях. Она предоставляет набор гибких возможностей с настраиваемым API.

Пример

Полосы прогресса повышают читаемость консольных приложений с длинными выводами, предоставляя компактный обратный путь.

Возможности

  • Несколько полос: goprogressor может отображать несколько полос прогресса, которые можно отслеживать параллельно
  • Динамическое добавление: Добавьте дополнительные полосы прогресса в любое время, даже после начала отслеживания прогресса
  • Функции Prepend и Append: Прикрепите или добавьте процент завершения и затраченное время к полосам прогресса
  • Персонализируемые декораторные функции: Добавьте свои функции вокруг полосы вместе с вспомогательными функциями

Использование

Чтобы начать отслеживание полос прогресса, вызовите goprogressor.Start() и добавьте полосу прогресса с помощью goprogressor.AddBar(total int). Обновите прогресс с помощью bar.Incr() или bar.Set(n int). Полный исходный код для приведённого ниже примера доступен по адресу example/simple/simple.go.

goprogressor.Start()            // начать отрисовку
bar := goprogressor.AddBar(100) // добавить новую полосу

// опционально, прикрепить или добавить процент завершения и затраченное время
bar.AppendCompleted()
bar.PrependElapsed()
``````go
for bar.Incr() {
  time.Sleep(time.Millisecond * 20)
}

Это отобразит следующее в консоли:

Пример

Использование персонализированных декораторов

Вы также можете добавить персонализированную декораторную функцию помимо стандартных bar.AppendCompleted() и bar.PrependElapsed(). Приведенный ниже пример отслеживает текущий шаг для прогресса развертывания приложения. Исходный код для данного примера доступен по адресу example/full/full.go.

var steps = []string{"скачивание исходников", "установка зависимостей", "скомпилировано", "упаковано", "заполнение базы данных", "развернуто", "запущены серверы"}
bar := goprogressor.AddBar(len(steps))

// добавить текущий шаг перед полосой
bar.PrependFunc(func(b *goprogressor.Bar) string {
  return "приложение: " + steps[b.Current()-1]
})

for bar.Incr() {
  time.Sleep(time.Millisecond * 10)
}

Отображение нескольких полос

Вы можете добавить несколько полос с помощью goprogressor.AddBar(n). Приведенный ниже пример демонстрирует обновление нескольких полос параллельно и добавление новой полосы позже в процессе. Исходный код для этого примера доступен по адресу example/multi/multi.go.

waitTime := time.Millisecond * 100
goprogressor.Start()

// запускаем прогресс-бары в отдельных горутинах
var wg sync.WaitGroup

bar1 := goprogressor.AddBar(20).AppendCompleted().PrependElapsed()
wg.Add(1)
go func() {
  defer wg.Done()
  for bar1.Incr() {
    time.Sleep(waitTime)
  }
}()

bar2 := goprogressor.AddBar(40).AppendCompleted().PrependElapsed()
wg.Add(1)
go func() {
  defer wg.Done()
  for bar2.Incr() {
    time.Sleep(waitTime)
  }
}()
```time.Sleep(time.Second)
bar3 := goprogressor.AddBar(20).PrependElapsed().AppendCompleted()
wg.Add(1)
go func() {
  defer wg.Done()
  for i := 1; i <= bar3.Total; i++ {
    bar3.Set(i)
    time.Sleep(waitTime)
  }
}()

// ждём завершения всех горутин
wg.Wait()

---

Это создаст

![пример](doc/example_multi.gif)

### Увеличение счётчика (`Incr`)

[Bar.Incr()](https://godoc.org/gitee.com/shirdonl/goProgressor#Bar.Incr) является атомарным счётчиком и может использоваться как общее средство трекинга, что делает его идеальным для отслеживания прогресса работы, распределённой на множество горутин. Исходный код для данного примера доступен по адресу [example/incr/incr.go](example/incr/incr.go)

```go
runtime.GOMAXPROCS(runtime.NumCPU()) // использовать все доступные ядра процессора

// создаём новый бар и добавляем информацию о текущем прогрессе задачи к нему, затем распределяем её на 1000 горутин
count := 1000
bar := goprogressor.AddBar(count).AppendCompleted().PrependElapsed()
bar.PrependFunc(func(b *goprogressor.Bar) string {
  return fmt.Sprintf("Задача (%d/%d)", b.Current(), count)
})

goprogressor.Start()
var wg sync.WaitGroup

// распределяем задачи на горутины
for i := 0; i < count; i++ {
  wg.Add(1)
  go func() {
    defer wg.Done()
    time.Sleep(time.Millisecond * time.Duration(rand.Intn(500)))
    bar.Incr()
  }()
}
time.Sleep(time.Second) // ждём секунду до завершения всех горутин
wg.Wait()
goprogressor.Stop()

Установка

$ go get -v gitee.com/shirdonl/goProgressor

Запланированные задачи

  • Изменение размера баров и декораторов путём автоматического определения размеров окна
  • Обработка большего количества прогресс-баров, чем позволяет вертикальное пространство экрана## Лицензия

goprogressor распространяется под лицензией MIT. Смотрите LICENSE.

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Библиотека на языке Go для отображения прогресс-баров в терминальных приложениях. Развернуть Свернуть
MIT
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/shirdonl-goProgressor.git
git@api.gitlife.ru:oschina-mirror/shirdonl-goProgressor.git
oschina-mirror
shirdonl-goProgressor
shirdonl-goProgressor
master