37.1K subscribers
1.46K photos
33 videos
5 files
1.62K links
加入频道
💻 Grype — сканер уязвимостей на Go для образов контейнеров и файловых систем


brew tap anchore/grype
brew install grype


Работает с Syft, мощным инструментом SBOM (software bill of materials) для контейнерных образов и файловых систем.

GitHub

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 О разных подходах к написанию тестов в Go

Обычный подход в написании теста для компонента состоит из следующего:
🟡в компонент внедряются зависимости, но не в виде конкретных типов, а через интерфейсы
🟡на основе интерфейса генерятся моки — в тестах мы вызываем методы тестируемого компонента, засетапив сначала ожидаемые вызовы мока

Такой подход приводит к тому, что в тестах фиксируется внутренняя работа компонента, хотя все, что мы хотим проверить - это, что компонент делает то что нужно, без разницы как он это делает внутри

📎 Что с этим можно сделать?
📎 В тему

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 algernon — автономный сервер на чистом Go

go install github.com/xyproto/algernon@latest

algernon — это веб-сервер со встроенной поддержкой QUIC, HTTP/2, Lua, Teal, Markdown, Pongo2, HyperApp, Amber, Sass(SCSS), GCSS, JSX, Ollama (LLMs), BoltDB (встроенный, хранит БД в файле, как SQLite), Redis, PostgreSQL, MariaDB/MySQL, MSSQL
Помимо этого algernon предоставляет ограничение скорости, плавное отключение, плагины, настройка прав доступа.
Все в одном небольшом исполняемом файле.

🖥 GitHub

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 mockery — неплохой генератор моков в Go

mockery предоставляет возможность легко генерировать моки для интерфейсов Golang с помощью пакета stretchr/testify/mock
mockery избавляет от шаблонного кодирования, необходимого для использования моков

🖥 GitHub
🟡 Доки

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 Установка и использование нескольких версий Go

▶️Перед скачиванием нужной версии, создадим каталог в котором будут храниться различные версии Golang. Путь до каталога не принципиален:

mkdir ~/golang
cd ~/golang

Далее переходим на страницу официального сайта https://go.dev/dl/, с перечнем доступных версий Golang и скачиваем нужный нам архив.

Распаковываем скаченный архив в созданный каталог, у меня это ~/golang и переименовываем его так, чтобы было понятно какая это версия, например go-1.21.4. Должно получиться ~/golang/go1.21.4.

Предположим, что вышла новая версия Golang 1.21.5. Так же скачиваем архив, с данной версией на официальном сайте и распаковываем ее в созданный каталог ~/golang/go1.21.5. И того должна получиться следующая структура:

├── go-1.21.4
├── go-1.21.5

Аналогичным образом в дальнейшем добавляем другие версии.


▶️Переменные среды

🟡GOROOT — хранит путь до используемой версии Go.

Сейчас если вести в терминале команду:
go version

Мы получим ошибку go: команда не найдена. Чтобы это исправить откроем в привычном вам редакторе файл ~/.profile и добавим в него следующую конструкцию:

# golang
export GOROOT=~/golang/go1.21.5
export PATH=$PATH:$GOROOT/bin

Далее мы расширяем переменную сред PATH добавив к ее значениям $GOROOT/bin, ссылающуюся на исполняемый файл Golang.

Перезапустим терминал либо введем команду, чтобы изменения вступили в силу:

source ~/.profile


Теперь если ввести в терминале команду:
go version

Вместо ошибки увидим текущую версию — go version go1.21.5 linux/amd64.


🟡GOPATH — хранит путь до сторонних пакетов.

go get <package>
go install <package>

Необходимо явно указать каталог куда пакеты будут скачены. Создадим каталог ~/golang/packages рядом с версиями Golang.

mkdir ~/golang/packages


Остается добавить, созданный каталог в переменные среды по аналогии как это было сделано с GOROOT и того должно получиться:

# golang
export GOROOT=~/golang/go1.21.5
export GOPATH=~/golang/packages
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin

Перезапустим терминал либо введем команду, чтобы изменения вступили в силу:

source ~/.profile


@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 Пишем менеджер пакетов на Go

🟡Разработка пакетного менеджера — не самая частая задача в программировании, прямо скажем. Их и готовых более чем достаточно.

🟡Однако всё же может возникнуть ситуация, когда готовые решения не подходят.
В этой статье разберём архитектуру и детали реализации пакетного менеджера на Go. Рассмотрим универсальные вещи, которые вы сможете применить к любому менеджеру пакетов, если решите его написать.

📎 Статья

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 Тестирование модулей Go

🟡Модульное тестирование предполагает проверку и валидацию наименьшей тестируемой единицы в программе, такой как функция или метод в Go. Модульное тестирование гарантирует, что код работает как ожидается, и позволяет разработчикам вносить изменения в код, не случайно нарушая существующий функционал.

🟡Кроме того, автоматический запуск модульных тестов в среде непрерывной интеграции (CI) позволяет быстро обнаруживать вновь введенные ошибки, тем самым повышая стабильность программного обеспечения.

Подробнее о тестировании модулей — в статье. Если конкретнее, то речь пойдёт о:
— Проведение базовых тестов с использованием testing
— Написание testcase
— Подготовительные работы до и после тестирования
— Повышение эффективности тестирования
— Техники расширенного тестирования

📎 Статья

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 Glance — self-hosted дашборд на Go, который позволяет собрать все источники информации в одном месте

Поддерживает такие виджеты:
— Контент из RSS-каналов
— Посты из субреддитов
— Погода
— Закладки
— Последние видеоролики на YouTube с определенных каналов
— Календарь
— Акции
— iframe
— Релизы GitHub
— Мониторинг сайта

Запустить, используя Docker:
docker run -d -p 8080:8080 \
-v ./glance.yml:/app/glance.yml \
-v /etc/timezone:/etc/timezone:ro \
-v /etc/localtime:/etc/localtime:ro \
glanceapp/glance


🖥 GitHub

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 Github-compare — инструмент на Go для сбора статистики аккаунта github

go install github.com/anqiansong/github-compare@latest

Написан с использованием termui, termui-dpc, spinner, go-github, githubv4, mapreduce, cobra и lipgloss

🖥 GitHub

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 nakedI18n

Простой инструмент для реализации i18n golang.

i18n - это сокращение от английского Internationalization — интернационализация, или поддержка программным продуктом различных языков.

🖥 Github

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 Годное руководство по фреймворку Ent в Go

Ent — это фреймворк сущностей, он упрощает процесс создания и поддержки приложений для модели данных большого масштаба.

Фреймворк ent в основном следует следующим принципам:
Легко моделировать схему базы данных в виде графовой структуры.
Определение схемы в виде кода на языке Go.
Реализация статических типов на основе генерации кода.
Написание запросов к базе данных и обход графа очень просто.
Легко расширяем и настраиваем с использованием шаблонов Go.

📎 Руководство

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM