# Go | Max Wiki Site

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

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

## Разное

- Простой Web Framework Echo
- Лёгкая wiki
  .
- Ketchup CMS
  , github
  .
- matterbridge
  . Мост для объединения различных средств общения (slack, tegeram, mattermost и т.д.).
- Hermes
  - сервер для обмена файлами.
- Croc
  - клиент-сервер для посылки файлов.
- Go из Shell neugram
  .
- Различные утилиты для проверки сетей (сканеры, парсеры сертификатов и т.д.) Zmap
  Github
- Вывод дерева зависимостей depth
  . Блог
  .
  - В графическом виде go-callvis
    .
- 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
  .

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

- K6
  . Документация
  .
- vegeta (https://github.com/tsenart/vegeta)
  - подключается, либо как библиотека, либо используется из командной строки.

## 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

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

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

- 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.

gdoc_arrow_right_alt

# Internationalization (i18n) и Localization (l10n) в Go

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

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

## Internationalization (i18n)

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

- golang.org/x/text/language
- golang.org/x/text/message

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

    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

Сайт
.

- Основной репозиторий
  , Зеркало на github.com
  .
- Документация по разным библиотекам (GoDoc)
  .
- Новый сайт с документацией (go.dev)
  .
- Описание параметров утилиты Go
  .
- Gopm Registry
  реестр разных пакетов go. Можно скачать, если на компьютере не установлены программы версионного контроля.
- Список архитектур и операционок в которые можно компилировать
  .
- Форум
  .
- Альтернатива Play Golang
  .
- Go Report Card
  . Сервис проверяющий Go репозиторий на соответствие стандартам.
- Введение в программирование на Go
  - перевод книги An introduction to programming in Go

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

    go get package/...

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

gdoc_arrow_right_alt