Полезные программы на Go

Различные программы, написанные на Go.

Разное

  • Простой Web Framework Echo
  • Лёгкая wiki.
  • Ketchup CMS, github.
  • matterbridge. Мост для объединения различных средств общения (slack, tegeram, mattermost и т.д.).
  • Hermes - сервер для обмена файлами.
  • Croc - клиент-сервер для посылки файлов.
  • Go из Shell neugram.
  • Различные утилиты для проверки сетей (сканеры, парсеры сертификатов и т.д.) Zmap Github
  • Вывод дерева зависимостей depth. Блог.
  • qrcp - передача файлов с компа на мобилку, например, по QRCode.
  • mage - замена make на Go. Исходники на GitHub.

Консольные приложения

  • wego - показ погоды в консоли.

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

  • godu - позволяет быстро просматривать каталоги с большим количеством файлов.
  • lf - консольный менеджер файлов на Go.
  • wzd - веб-сервер для работы с огромным количеством файлов.
  • duf - отображение информации про диски. Работает только под Unix.
  • fsql - поиск файлов в виде SQL.

Хранение и версионирование кода

  • Система хранения и версионирования кода - Gogs. Github.
  • Gitea - склонированная и расширенная версия Gogs. Разворачивается локально. Исходники на GitHub.
  • Lazygit (https://github.com/jesseduffield/lazygit). Консольный клиент для работы с git.
  • Gitness - opensource проект. Разворачивается локально. GitHub.

Нагрузочное тестирование

WEB

  • Caddy - лёгкий и быстрый http-сервер как Nginx или Apache. Документация. Исходники на github.
  • FRP - reverse-proxy.
  • Casbin forum - реализация форума на Go и ReactJS.
  • sftpgo - сервер, поддерживающий различные протоколы: SFTP, HTTP, FTP/S and WebDAV. И также различные системы хранения: local filesystem, encrypted local filesystem, S3 (compatible) Object Storage, Google Cloud Storage, Azure Blob Storage.

Рисование графиков

Chart - рисует график на основании данных из стандартного потока ввода. Примеры отображения. Статья об использовании.

gdoc_arrow_right_alt

Полезные функции

Перехват Ctrl+C

Информация взята из блога Mat Ryer.

func main() {
    ctx := context.Background()

    // trap Ctrl#C and call cancel on the context
    ctx, cancel := context.WithCancel(ctx)
    c := make(chan os.Signal, 1)
    signal.Notify(c, os.Interrupt)
    defer func() {
        signal.Stop(c)
        cancel()
    }()
    go func() {
        select {
        case <-c:
            cancel()
        case <-ctx.Done():
        }
    }()

    doSomethingAwesome(ctx)
}

Более простой вариант

func main() {
    c := make(chan os.Signal, 1)
    signal.Notify(c, os.Interrupt)
// Wait for Ctrl#C
    <-c
}

Как правильно реализовать Singletone

Вариант взят отсюда singleton-pattern-in-go.

gdoc_arrow_right_alt

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

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


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

  • Библиотека от 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.

gdoc_arrow_right_alt

Internationalization (i18n) и Localization (l10n) в Go

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

Альтернативный пакет (https://github.com/nicksnyder/go-i18n).

Internationalization (i18n)

Для форматирования вывода информации в национальном формате (например, чисел) используются следующие пакеты:

По-умолчанию, они не установлены. Необходимо их скачать:

go get -u golang.org/x/text/language
go get -u golang.org/x/text/message

Для вывода информации на основании языка используется тип message.Printer. Используется он следующий образом:

gdoc_arrow_right_alt

Форматирование даты/времени

Информация взята Format/parse a time or date

Простейший пример

Go, в отличие от других языков, использует свою нотацию для времени не yyyy-MM-dd. Go использует мнемоническую нотацию:

Mon Jan 2 15:04:05 MST 2006.

Её надо переписать в виде, котором надо. Проще всего это запомнить, если переписать её как 01/02 03:04:05PM ‘06 -0700.

gdoc_arrow_right_alt

Go

Различная информация по языку Go

Сайт.

Получение пакетов с зависимостями

go get package/...

Получение пакетов, необходимых для текущего приложения:

gdoc_arrow_right_alt