# Полезные библиотеки | Max Wiki Site
Конфигурация и всё такое Логгирование UI Пользовательский интерфейс в терминале GUI Консоль Работа с БД Работа с json, XML HTML, парсинг сайтов Работа с файлами Тестирование Генерация данных Шаблоны HTTP WEB-приложения OpenAPI Работа с сетью Работа со строками Работа со временем Генерация различных ID Работа с hardware Сетевые framework Списки и наборы Игры Графика Видео Статистика и математика Обработка данных на потоке и прочее Парсеры Коллекции Встраивание ресурсов (теперь не актуально, так как с версии 1.6 есть встроенный механизм) Вспомогательные утилиты Работа со звуком Мониторинг [cut: 2423 characters, first 593 kept]

# Полезные библиотеки

## Конфигурация и всё такое

- viper
  Чтение и сохранение конфигурации в различных форматах.
- Работа с командной строкой: создание флагов командной строки в POSIX формате, автоматическая генерация “как использовать”
  .
- Kingpin
  - ещё одна реализация работы с флагами. Godoc
  .
- Flaggy
  . Также работа с командной, возможность создания подкоманд. Godoc
  .
- Go-Config
  . Позволяет собирать конфигурацию из различных источников (файлы, командная строка и т.д.). Godoc
  . Описание в блоге
  .
- Gonfig
  - позволяет читать конфигурацию из json и переменных окружения.
- Venom
  . Также позволяет конфигурировать из различных источников. GoDoc
  .
- Реализация формата HOCON
  configuration
  . GoDoc
  .
- Yaml
  - работа с YAML от Canonical
  . API
  . Blog
  .
- promptui
  - позволяет запрашивать у пользователя информацию в процессе работает. Интегрируется, например с cobra
  и другими подобными библиотеками. GoDoc
  .
- cli
  - ещё одна библиотека для расширения флагов командной строки. GoDoc
  .
- koanf
  - позиционируется как более легковесный конкурент viper
  .

## Логгирование

- Библиотека от Google Glog
  . Документация
  .
- Библиотека от juju Loggo
  . Документация
  .
- Библиотека от Uber Zap
  . Документация
  .
- Logrus
  . Наверное наиболее популярный. Используется в Docker. API
  .
- Вроде как самая маленькая библиотека go-logging
  . API
  .
- zerolog
  - логирование в формате json. GoDoc
  . Также может логировать в нормальном виде.
- go-spew
  - красивый вывод в консоль данных для отладки. GoDoc
  .
- httpretty
  - удобное логирование в консоль http запросов как на сервере, так и на клиенте. GoDoc
  .
- zlog
  - логер позволяет скрывать чувствительную информацию из логирования. GoDoc
  .
- Log
  - простенький логер с подсветкой вывода от создателей Bubble Tea
  . GoDoc
  .

## UI

### Пользовательский интерфейс в терминале

Отличная статья
с обзором разных библиотек для написания text-based GUI.

- Пользовательский интерфейс в терминале (https://github.com/nsf/termbox-go)
  .
- Ещё одна реализация (https://github.com/gdamore/tcell)
  . Почти полностью совместима с termbox-go
  .
- gocui
  . Godoc
  .
- TermUI
  . Документация
  .
- Bubble Tea
  - от создателей Glow
  .
- Box CLI Maker
  - позволяет создавать приветственные окна.

### GUI

- Реализация node.js socket (https://github.com/googollee/go-socket.io)
  . Полезно при использовании electron
  в качестве UI.
- Библиотека для написания GUI на Electron (https://github.com/asticode/go-astilectron)
  .
- Walk.
  Библиотека позволяет писать GUI под Windows. Является обёрткой над win32 API.
- duit
  . Развивающаяся библиотека. Кроссплатформенная. Вводная информация
  .
- WebView
  - вызов встроенного в GUI операционки просмотрщика HTML. Кросплатформенный. GoDoc
  .
- QT(https://github.com/therecipe/qt)
  - биндинг QT для Go. Wiki
  .
- WUI(https://github.com/gonutz/wui)
  - позволяет создавать простые GUI в Windows. GoDoc
  .
- Systray
  - позволяет выводить информацию в tray.
- Gio
  - пилит чувак из Google. Надо следить. Основной сайт gioui
  .
- Gi
  - ещё один framework, но зависит от cgo.
- fyne
  - кроссплатформенная библиотека. Под виндой собралась. GoDoc
  . Документация на сайте разработчика
  .
- giu
  - обёртка над Dear ImGui
  . Поддерживает lua. GoDoc
  .
- govcl(https://github.com/ying32/govcl)
  - биндинг над графической библиотекой lazurus. Мне кажется очень перспективная. README
  .
- pix
  - какая-то минималистическая библиотека. GoDoc
  .

## Консоль

- go-pretty
  - упрощает вывод текста, таблиц, списков в консоль. Progressbar. GoDoc
- gchalk
  - позволяет выводить в консоль разноцветный текст. GoDoc
  .
- PTerm
  - ещё одна реализация цветного терминала. Очень прикольный. GitHub
  .
- lipgloss
  - ещё одна библиотека для создания интерфсов в терминале.
- Анимация в командной строке Wow
  .
- progressbar
  от автора croc. GoDoc
  .
- color
  - позволяет раскрашивать вывод в консоль. GoDoc
  .
- ishell
  - библиотека позволяет создавать интерактивные консольные приложения.

## Работа с БД

- sqlx
  . Работа с данными как со структурами.
- sqlboiler
  . Ещё одна библиотека для генерации данных на основании схемы. Документация
  .
- Драйвер для MS SQL (https://github.com/denisenkom/go-mssqldb)
  .
- Bolt (embeded key/value база данных) (https://github.com/boltdb/bolt)
  (например, используется в InfluxDB
  ).
  - Список проектов, использующих bolt
    . Среди них много интересных.
- Budger
  .
- Драйвер для sqllite (https://github.com/mattn/go-sqlite3)
- ql
  - embedded SQL database. GoDoc
  .
- Gorm
  - ORM для Go. Github
  . GoDoc
  . Docs
  .
- go-sqlbuilder
  - постритель запросов к базе. GoDoc
  .
- squirrel
  - sql генератор. GoDoc
  .
- go-memdb
  - база в памяти, близка к Redis. поддерживает транзакции.
- sqlite
  - реализация sqlite на чистом Go. GoDoc
  .

## Работа с json, XML

- jsoniter
  .
- Проекты Tidwall
  - gjson
    . Библиотека для работы с json. Можно получать значение по пути.
  - sjson
    . Библиотека, противоположная gjson. Позволяет устанавливать значения по пути.
  - jj
    - обработка json на потоке.
- fastjson
  . Библиотека от создателя fasthttp
  . API
  .
- gojsonq
  A simple Go package to Query over JSON/YAML/XML/CSV Data. GoDoc
  .
- easyjson
  - серилизатор без reflection от mail.ru.
- hujson
  - HumanJson - позволяет парсить json с комментариями и запятыми после последнего элемента. GoDoc
  .
- go-json
  - очередной быстрый заменитель стандартной библиотеки.
- sonic
  - библиотека от создателей Tik-Tok. Используют ассемблер. GoDoc
  .

## HTML, парсинг сайтов

- goquery
  - позволяет работать со страницой как Jquery только на GO. Удобно для разбора. GoDoc
  .

## Работа с файлами

- fslock
  - блокировка файлов. Godoc
  .
- fsnotify
  - отслеживание изменений ФС. GoDoc
  .

## Тестирование

- Bdd test framework ginkgo
  . GitHub
  .
  - gomega
    - библиотека для сравнения, интегрируется с ginkgo.
- goblin
  - ещё один BDD.
- Godoc
  . Пакет для создание и запуска тестов на Cucumber в Go.
  - Как использовать godoc для создания заглушек на основании feature-файлов
  - Gherkin parser Go
    .
- Testify
  - библиотека по принципу *unit. Добавляет методы assert.
- GoConvey
  . Github
  .
- RobotGo
  - позволяет управлять GUI из Go.GoDoc
  . ApiDoc
  .
- Rapid
  - property-based тестирование. GoDoc
  .
- go-cmp
  - библиотека для сравнения значений двух структур. GoDoc
  .
- quicktest
  - набор удобных методов.
- chromedr
  - реализация Chrome driver API на Go. GoDoc
  .
- gocheck
  - конкурент testify
  .

### Генерация данных

- Fake
  . Библиотека для генерации различных данных на русском и английском языках. GoDoc
  .
- Faker
  - ещё одна библиотека. GoDoc
  .
- gofakeit
  - тоже для генерации данных.

## Шаблоны

- templ
  - написание html шаблонов на Go. Документация
  .

## HTTP

- fasthttp
  - на сегодняшний момент самая быстрая реализация http сервера на Go. API
- resty
  - rest-client, позволяющий удобно делать запросы и разбирать ответы. Автоматически измеряет время ответа от сервера. GoDoc
  .
- quic-go
  - реализация протокола quic на Go.

## WEB-приложения

- Gorilla web toolkit
  . Небольшая вводная
  .
- Revel
  . Framework типа Grails
  для Go.
- Компилятор Go в JS GopherJs
  .
- GoWebApp
  - MVC web application на Go. Blue Jay - Blueprint
  - Более продвинутая реализация.
- Framework macaron
  . Документация
  . Github
  .
- hutplate
  - надстройка над http для облегчения авторизации, сессионностии прочее.
- Bufallo
  - ещё один web-framewrok. Документация
  . Github
  .
- Beego
  web-framework. Github
  . Godoc
  .
- quicktemplate
  - замена работы с шаблонами в Go. Похожа на работу с Jsp в Java. API
  .
- gramework
  - от создателя fasthttp
  .
- chi
  - простой легковесный роутер как Gorilla
  , только легче и идеоматичней. Godoc
  .
- echo
  - легковесный web-framework.
- Gin
  - вроде как шустрый web-framework. Офицальный сайт
  . GoDoc
  .
- authboss
  - библиотека для аутентификации, авторизации. GoDoc
  .
- sessionup
  - позволяет управлять сессиями. GoDoc
- Secure
  - прослойка позволяет настраивать некоторую безопасность для web-приложений. GoDoc
  .
- nosurf
  - помогает осущесвлять проверку безопасности для web-серверов. GoDoc
  .
- go-kit
  - набор для создания микросервисов. GitHub
  .
- webrtc
  - реализация WebRTC на GO.
- goa
  - библиотека позволяет быстро создавать api и микросервисы. Имеет свой DSL для описания. GitHub
  .
- go-app
  - ещё один интересный проект написания progressive web apps (PWA). С декларативным синтаксисом. GitHub
  .
- ldpap
  - реализация LDAP 3 на GO.
- Zepto
  - обещают легковесный framework в Go-стиле.
- GopherJS
  - компилятор из go в JS. GoDoc
  .
- flogo
  - framework для создания микро-сервисов. GitHub
  .
- bud
  - очередной мощный фреймворк для создания сайтов. Пока требует node.js. Будем наблюдать.

## OpenAPI

- ogen
  . Официальный сайт
  .

## Работа с сетью

- Evio
  - работа с сетью, основанная на событиях.
- Noise
  . Библиотека, позволяющая писать децентрализованные P2P приложения. Godoc
  .
- limiter
  - библиотека для разных ограничений в сети, типа количества запросов в секунду.
- GoPacket
  - библиотека для работы с сетевыми пакетами от Google. GoDoc
  .

## Работа со строками

- Dateparse
  - библиотека для парсинга строк, представляющих из себя различные форматы дат. Документация
  .
- GoAWK
  - реализация парсера языка AWK на Go. Есть возможность использовать прямо внутри Go. GoDoc
  .

## Работа со временем

- Now
  - библиотека расширяет некоторые методы для работы с датой. Документация
  .
- cron
  - реализация cron на GO. GoDoc
  .
- when
  - парсер времени с натурального языка.

## Генерация различных ID

Информация взята отсюда
.

Пакет | Пример | Описание формата
--- | --- | ---
ksuid | 0pPKHjWprnVxGH7dEsAoXX2YQvU | 4 bytes of time (seconds) # 16 random bytes
xid | b50vl5e54p1000fo3gh0 | 4 bytes of time (seconds) # 3 byte machine id # 2 byte process id # 3 bytes random
betterguid | -Kmdih_fs4ZZccpx2Hl1 | 8 bytes of time (milliseconds) # 9 random bytes
sonyflake | 20f8707d6000108 | ~6 bytes of time (10 ms) # 1 byte sequence # 2 bytes machine id
ulid | 01BJMVNPBBZC3E36FJTGVF0C4S | 6 bytes of time (milliseconds) # 8 bytes random
sid | 1JADkqpWxPx-4qaWY47~FqI | 8 bytes of time (ns) # 8 random bytes
go.uuid | 5b52d72c-82b3-4f8e-beb5-437a974842c | UUIDv4 from RFC 4112 for comparison
uuid | UUIDs based on RFC 4122 |

## Работа с hardware

- Gobot
  Библиотека позволяет программировать различные устройства. Репозиторий на Guthub
  . Документация
  .
- Emgo
  Позволяет писать микропрограммы для ARM Cortex-M based MCUs. Репозиторий на Github
  . Блог
  как это всё работает.
- Periph
  от команды google GitHub
  . GoDoc
  .
- Tinygo
  GitHub
  .
- TamaGo
  - bare metal Go for ARM SoCs . Позволяет писать на GO для голых чипов AMD.
- ghw
  - Golang HardWare discovery/inspection library. Позволяет получать информацию о конфигурации оборудовании, текущем состоянии.

## Сетевые framework

- TarsGo
  . Реализация tars протокола для Go. GoDoc
  .

## Списки и наборы

- Go-Set
  - набор разных типов коллекций и операций с ними. GoDoc
  .
- Enumer
  - генератор для enum.
- concurrent-map
  - конкурентная мапа.

## Игры

- Ebiten
  . Позволяет писать двухмерные игры. Godoc
  . Краткая справка
  . GitHub
  .
- Prototype
  . Простая библиотека для работы с канвой. GoDoc
  .
- Библиотека для написания игр pixel
  .

## Графика

- Draw2d
  - библиотека для вывода графики. Godoc
  .
- Gg
  - визуализация двухмерной графики. Godoc
  .
- colorgrad
  - позволяет делать градиенты, шкалы цветов и всё такое. GoDoc
  .
- generativeart
  - позволяет создавать абстрактные рисунки.
- imaging
  - изменение изображений - изменение масштаба, поворот и т.д.

## Видео

- Go Fluent FFmpeg
  - wrapper для ffmpeg. Позволяет работать с видеофайлами из программы на Go. GoDoc
  .

## Статистика и математика

- Tachymeter
  - подсчёт статистики с выводом в виде json, histogram и в консоль. GoDoc
  .
- Gonum
  - мощная библиотека для различной математики и статистики. Github
  . GoDoc
  .
- decimal
  - работа с числами с заданной точностью. GoDoc
  .

## Обработка данных на потоке и прочее

- Machinery
  обработка сообщений. Работа с различными источниками. Godoc
  .
- Bigslice
  - аналог Spark на Go. GitHub
  . GoDoc
  .
- watermill
  - работа с сообщениями. Возможность интегрироваться с Kafka, RabbitMQ.

## Парсеры

- Интерпретатор GO Yaegi
  . Введение
  . GoDoc
  . Работает как библиотека, так и как приложение командной строки. Позволяет парсить и запускать код на Go.

## Коллекции

- ristretto
  - конкурентный кеш. Описание в блоге
  . Godoc
  .
- olric
  - распределённый in-memory кеш, ключ-значение. GoDoc
  .

## Встраивание ресурсов (теперь не актуально, так как с версии 1.6 есть встроенный механизм)

- esc
  - встраивает файлы в бинарник, при этом их сжимая. GoDoc
  .
- Rice
  - упаковка ресурсов в исполняемый файл. GoDoc
  .
- packr
  -создан на основе rice, но улучшен. GoDoc
  .
- statik
  - чем-то похож на esc. GoDoc
  .
- broccoli
  - встраивает и сжимает ресурсы в бинарник. GoDoc
  .
- binclude
  - тоже умеет сжимать. Обращение к ерсурсам практически также, как и к ресурсам системы. GoDoc
  .

## Вспомогательные утилиты

- Goweight
  - анализ размера используемых пакетов.
- go-mod-outdated (go-mod-outdated)
  - анализ устаревших пакетов в зависимостях.
- Spaghetti
  - анализ зависимостей в браузере.
- Go binary size SVG treemap
  - рисует SVG карту библиотек в бинарнике. Примерно как Goweight.

## Работа со звуком

- beep
  - работа со звуком в форматах WAV, MP3, OGG, and FLAC. GoDoc
  .

## Мониторинг

- ExpvarMon
  - библиотека позволяет мониторить в консоли программу на Go.
- fgprof
  - мониторинг загрузки процессора. Достаточно простой и наглядный. GoDoc.
- statviz
  - рисует разные графики в runtime.

## OpenCV

- gocv
  - библиотека для работы с OpenCv из Go. GitHub
  .
- Работа с открытой библиотека OpenCV
  - wrapper для OpenCv на Go.

## Офис

- excelize
  - работа с excel файлами из Go. Документация
  . GoDoc
  .

## goroutines

- Runner для goroutines
  . Позволяет легко управлять запущенными goroutines.
- ants
  . Позволяет создавать с пулом goroutings. GoDoc
  .
- Управление gouroutines Run
  . Godoc
  .
- tunny
  - создание пулов gorouting. Похоже как в джаве сделаны Executors. GoDoc
  .
- goleak
  - поиск утечек в рутинах.
- Conc
  - ещё одна реализация часто встречающихся операций с потоками. Пулы, параллельная работа с мапами и т.д.

## Шифровние

- age
  -библиотека для семмитричного и ассиметриченого шифрования. Может использоватся как отдельная утилита GoDoc
  .

## События

- Колокол
  - простая библиотека для работы с событиями. Статья от авторов на Хабре
  .
- RxGo
  - одна из самых популярных библиотек для работы на событиях.

## Интеграция с другими ЯП

- py
  - интеграция с Python. GoDoc
  .

## Разное

- Распознавание естественных языков
  .
- Фильтрация строк из ридера как в Groovy и Unix
  . Документация
  .
- linq, как в C# в Go
  . Документация
  .
- Множество библиотек для web
  .
- Etree
  . Библиотека для работы с XML.
- Рисование графиков
  - go-chart
    .
  - Glot
    . Документация
    .
- Список проектов для работы с железом
  .
- Reducemap на Go gleam
  . Анализ данных.
- Паук для web Colly
  . Документация
  .
- Работа с клавиатурой keyboard
  .
- Глобальных перехват Ctrl+C и прочих прерываний Goodbye
  . Статья от автора
  .
- Работа с изображениями govips
  .
- Клиент для elasticsearch
  . Запись в блоге
  .
- Gosec
  . Библиотека для сканирования исходного кода на Go и выявление проблем с безопасностью.
- Detective
  - мониторинг распределённых систем. GoDoc
  .
- Charlatan
  позволяет автоматически создавать заглушки для программных интерфейсов.
- Tablewriter
  - вывод таблиц в текстовом форматре.
- Chroma
  - подсветка синтаксиса. Godoc
  .
- Prototool
  от Uber. Альтернативная работа с protobuf. Godoc
  .
- BigMachine
  - библиотека для развертывания кластера. Например, работает в связке с Bigslice
  .
- g-locale
  - определение установленной локали пользователя. GoDoc
  .
- ASCIIGraph
  - вывод графиков в консоли при помощи ASCII символов. GoDoc
  .
- validator
  - проверка значений в структурах. GoDoc
  .
- go-humanize
  - позволяет переводить числа в байты, удобное время и прочее. GoDoc
  .
- error
  - набор обёрток для обработки ошибок.
- dagger
  - реализация графов.
- script
  - работа из Go c командами консоли. Возможно написание shell скриптов. Описание
  .