Представьте, что вам надо поднять какую-нибудь continuous integration систему. Распространённые решения (BuildBot, Jenkins, TravisCI, ...) — относительно монструозные сложные системы, заточенные под запуск недоверенного кода в изолированном окружении. Зайти на slave и поотлаживать скрипт запуска — не дадут. Кроме того, даже те же современные версии BuildBot интерфейса уже являются web-приложением, а не HTML страницами, что серьёзное неудобство. А можно что-нибудь попроще и полегче? И чтобы был…
Все уже слышали про Gemini CLI, который позволяет взаимодействовать с мощной gemini 2.5 прямо из командной строки. Это удобно, открывает массу возможностей. Но что, если мы захотим не просто использовать готовое решение, а понять, как оно работает изнутри? А если у нас вообще нету VPN для сервисов гугла? Или, что еще интереснее, создать свой собственный, пусть и экспериментальный, аналог? Чем мы хуже? Давайте сверстаем свой вариант на... GOLANG?Да, именно так. Мы не будем писать продакшн-готов…
Однажды в компанию, где я работал, пришел новый тимлид. И «го уберем SQL запросы из кода» стало одной из самых популярных фраз на ревью. Так что посвящается ему :-)Обращения к базе — одно из самых популярных действий бэкенд приложений, и чаще всего оно происходит с помощью SQL запросов. И есть несколько способов хранить запросы в коде: строка или константа непосредственно в качестве аргумента функции, билдер запросов или отдельно лежащий файл с SQL запросом, который эмбедится в Go код в момент …
Хранение денег — вещь только на первый взгляд простая, а на деле содержит множество подводных камней. Выбрав не тот тип данных, можно получить неточности в расчётах, возможна путаница при переводе суммы из одной валюты в другую. А если ещё и подключать внешние API, у каждого из которых своя точность для одних и тех же валют, уследить за совместимостью еще труднее.В свободное время я решила разработать телеграм-бота, который хранит и учитывает вклады, накопительные и брокерские счета. На этапе п…
Всем привет! Меня зовут Владимир Пустовалов, я C++ разработчик в команде Deckhouse компании «Флант». Мои коллеги — DevOps-инженеры — на данный момент обслуживают более 600 кластеров, и, естественно, в каждом из них развёрнута система мониторинга. Изначально мы использовали Prometheus — опенсорсную систему мониторинга, написанную на Go. По нашей статистике, она занимала около 20 % ресурсов каждого кластера. Мы не могли с этим мириться и поэтому разработали проект под названием Prom++, в котором…
Данная статья напоминает о проблемах X.509 PKI и реализаций ASN.1. Предлагает компактный, быстрый, детерминированный, потоковый и простой формат кодирования данных KEKS, а также криптографические сообщения для подписи и шифрования данных с поддержкой пост-квантовых алгоритмов. Представьте, что вам надо использовать инфраструктуру публичных ключей (PKI) в каком-то новом проекте. А он ещё и для встраиваемой системы. Всем известен X.509. Существует масса библиотек реализующих его подмножество …
UTF-8 валидация — одна из базовых операций при работе с текстом, которая выполняется миллионы раз в секунду в современных приложениях. Стандартная реализация в Go, хоть и корректная, далека от оптимальной по производительности. В этой статье расскажу, как мне удалось ускорить валидацию UTF-8 в 10 раз, используя SIMD‑инструкции ARM NEON и алгоритм из статьи «Validating UTF-8 In Less Than One Instruction Per Byte» Джона Кейзера и Дэниела Лемира.Проблема стандартной валидацииСтандартная реализация…
Я решил написать эту статью в первую очередь для себя, потому что перечитал кучу материалов про сборщик мусора (GC) в Go, и почти все они были слишком сложными. Моя цель — объяснить, как работает GC, что такое инкрементальность и барьер записи, так, чтобы я сам понял и запомнил и, возможно, стал полезным для других. А чтобы было веселее, я добавил гофера — маскота Go — в забавных иллюстрациях, которые помогут визуализировать идеи. Если вы, как и я, хотите разобраться в GC без лишней головной бо…
Вторая версия пакета json/v2, которая появится в Go 1.25 (август 2025) — большое обновление с множеством несовместимых изменений. В v2 добавили новые возможности, исправили ошибки в API и поведении, а также улучшили производительность. Давайте посмотрим, что изменилось!Базовоый сценарий использования функций Marshal и Unmarshal не меняется. Этот код работает как в v1, так и в v2:type Person struct { Name string Age int } alice := Person{Name: "Alice", Age: 25} // Кодируем Алис…