Go for Devs – Telegram
Go for Devs
1.07K subscribers
49 photos
17 videos
64 links
По сотрудничеству пишите в личные сообщения канала.
Download Telegram
🙏 Git bisect: быстрый способ найти баг

Вы когда-нибудь ловили баг в проекте, который «ещё вчера работал»?

Коммитов — целая гора, глазами не найти. Тут и выручает git bisect.

Это штука, которая делает бинарный поиск по истории. Вы указываете, где баг точно есть (git bisect bad HEAD), и где его точно не было (git bisect good abc123).

Дальше Git сам переключает вас на середину между "плохим" и "хорошим" кодом и говорит: «проверь».

Вы смотрите: баг есть → git bisect bad, бага нет → git bisect good.

И так несколько раз, пока Git не ткнёт пальцем в конкретный коммит: вот тут всё сломалось.

Фишка в том, что даже если между good и bad 100 коммитов, руками проверять придётся не сто, а всего 6–7. Логарифмы в действии 🙂

А если повезло, и баг можно проверить скриптом (например, тест падает с кодом 1) — вообще красота:


git bisect run ./test_bug.sh


Git сам пройдётся по истории и принесёт виновника на блюдечке.

Так что если в следующий раз придётся охотиться за багом — не спешите листать git log. Пусть git bisect сделает грязную работу 😉
6👍3🔥3
🆕 Новый экспериментальный API для JSON в Go

Спустя почти 15 лет после появления encoding/json в стандартной библиотеке разработчики столкнулись с его ограничениями.

В версии Go 1.25 появился экспериментальный encoding/json/v2 — он решает старые проблемы, добавляет потоковую обработку и повышает производительность.

📚 Подробности на Хабр: https://habr.com/ru/articles/945434/
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥42
🔧 Целостность данных JSON-колонок в PostgreSQL

JSON всё чаще используют в реляционных базах данных — он позволяет хранить гибкие структуры и избавляет от избыточных связей между таблицами. Но вместе с удобством появляется риск: данные могут потерять предсказуемость.

Если не контролировать содержимое JSON-колонок, туда легко попадут неожиданные значения: числа вместо строк, объекты вместо массивов. В итоге приложение может «сломаться» на ровном месте.

В MySQL проверка JSON поддерживается из коробки. В PostgreSQL для этого есть расширение, которое позволяет валидировать данные по JSON-схеме прямо на уровне БД.

Пример: у нас есть таблица products с колонкой attributes, где хранятся характеристики товара.


CREATE TABLE products (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
price DECIMAL(10, 2) NOT NULL,
attributes JSON NOT NULL DEFAULT '{}'
);


Мы ожидаем, что поле tags внутри этого JSON будет массивом строк. Однако без строгой проверки на уровне базы данных нет гарантии, что кто-то не запишет туда числа, объекты или вообще что-то неподходящее.

Чтобы сохранить гибкость JSON и одновременно обеспечить строгую структуру данных, можно использовать валидацию JSON-схемы на уровне базы данных. Для этого нужно добавить constraint, который автоматически проверит соответствие содержимого JSON определенной схеме при каждой операции вставки или обновления.

Пример для PostgreSQL:


ALTER TABLE products ADD CONSTRAINT data_is_valid CHECK(
validate_json_schema(
'{
"type": "object",
"properties": {
"tags": {
"type": "array",
"items": { "type": "string" }
}
},
"additionalProperties": false
}',
attributes
)
);


Теперь, попытка вставить данные с невалидным значение для tags приведёт к ошибке:


INSERT INTO products (..., attributes) VALUES
(..., '{}'), -- Пустой объект, допускается
(..., '{"tags": []}'), -- Пустой массив строк
(..., '{"tags": ["test"]}'); -- Массив со строкой
-- Результат: Операция успешна

INSERT INTO products (..., attributes) VALUES
(..., '{"tags": [2]}'); -- Массив с числом вместо строки
-- Ошибка: Нарушен constraint
🔥65👍4
🪲 За пределами отладчика: полное руководство по отладке Go-приложений

В новой статье рассказываем о том, что баги бывают разными: воспроизводимые, случайные, гейзенбаги и конкурентные.

А в арсенале Go-разработчика должны быть — TDD, стратегическое логирование, Delve, git bisect и даже онлайн-отладчик GoTutor.

📚 Подробности на Хабр: https://habr.com/ru/articles/944732/
👍42🔥2
#GoHero ⭐️ Rob Pike

Команда Go for Devs считает важным рассказать о людях, которые внесли наибольший вклад в развитие языка Go и его экосистемы. В первом посте из серии #GoHero мы расскажем о Робе Пайке — человеке, чье имя давно стало легендой в мире компьютерных наук.

–––

Rob Pike — один из трёх создателей Go, наряду с Ken Thompson и Robert Griesemer. До этого он уже оставил яркий след в истории: участвовал в разработке Unix, Plan 9 и Inferno, а также был соавтором кодировки UTF-8.

Первые работы над Go начались в 2007 году внутри Google, а официально язык был представлен в ноябре 2009 года.

Pike сыграл ключевую роль в формировании философии Go: простота, читаемость и скорость разработки превыше всего.

Помимо инженерных достижений, Rob Pike известен и как автор книг: вместе с Brian Kernighan он написал «The Unix Programming Environment» и «The Practice of Programming».

Сегодня Rob Pike продолжает работать в Google, оставаясь важной фигурой в команде Go. Его влияние чувствуется не только в языке, но и в самой культуре разработки — от подхода к простоте кода до принципов открытого сообщества.
5👍3🔥1
🤖 Genkit Go 1.0: AI-фреймворк для продакшена

Команда Go for Devs подготовила перевод статьи о релизе Genkit Go 1.0 — open source AI-фреймворка от Google для экосистемы Go.

Теперь можно быстро и безопасно создавать продакшен-ready AI-приложения с типобезопасными флоу, поддержкой RAG, вызова инструментов и богатым локальным тулчейном.

📚 Подробности на Хабр: https://habr.com/ru/articles/946248/
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥4🤯2
Используете ИИ-ассистентов для написания production-кода?
Anonymous Poll
61%
Да
18%
Нет
15%
Нет, но планирую начать
6%
Нет, и никогда не буду
👍31
🫡 Еженедельный дайджест №2

Для тех, кто был слишком занят на неделе или просто пропустил некоторые посты, публикуем дайджест!

Статьи:
Как мы выследили регрессию использования памяти в продакшен-сервисах на Go 1.24
Топ 5 возможностей Gin, которые должен знать каждый Go-разработчик
Новый экспериментальный API для JSON в Go
За пределами отладчика: полное руководство по отладке Go-приложений
Genkit Go 1.0: AI-фреймворк для продакшена

Посты-коротыши:
Зачем в Go интерфейсы требуют точного совпадения?
Git bisect: быстрый способ найти баг
Целостность данных JSON-колонок в PostgreSQL
GoHero ⭐️ Rob Pike

Опросы:
Используете ИИ-ассистентов для написания production-кода?

Самый популярный комментарий этой недели – комментарий к статье "Топ 5 возможностей Gin, которые должен знать каждый Go-разработчик" от пользователя @starwalkn:

При создании веб-API на Go, фреймворк Gin часто становится первым
Да, особенно в галерах, где важнее быстро наклепать продукт и забыть о нем. А в реальности же из-за несовместимости Gin со стандартным net/http (привет, Chi!) весь API будет зависеть именно от него и при смене роутера придется переписывать абсолютно все хэндлеры.

Пункт 1. Причем тут вообще Gin? Сервер создается и настраивается из пакета net/http и конфигурируется как душе угодно, Gin тут идет всего лишь как роутер, будь то горилла или http.ServeMux

Пункт 2. Обычный паттерн любого роутера, в чем тут особенность Gin?

Пункт 4. Опять же, каким боком тут Gin и его особенности? Вы останавливаете сервер, а не роутер

Ощущение, что автор статьи не работал ни с чем, кроме Gin и выдает его за волшебный способ реализации API, к тому же не различает понятия сервера и роутера. И где же тут "скрытые фишки"?


@go_for_devs
👍4🔥32
🆕 Создаём CLI-приложение прогноза погоды на Go

Команда Go for Devs подготовила перевод пошагового руководства: как написать собственное CLI-приложение прогноза погоды на Go.

Проект охватывает всё — от HTTP-запросов и парсинга JSON до удобного интерфейса командной строки.

Отличная практика для новичков и хороший повод освежить базовые навыки тем, кто уже работает с Go.

📚 Подробности на Хабр: https://habr.com/ru/articles/946974/
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7👍42
🔥 PostgreSQL 18: Виртуальные колонки — меньше кода, больше гибкости

PostgreSQL 18 принёс асинхронный I/O, UUID v7 и ещё кучу полезного. Но фича, которая нас реально радует — виртуальные вычисляемые колонки. Это способ держать бизнес-логику ближе к данным и не плодить триггеры и boilerplate-SQL.

Как было раньше: надо было дублировать одни и те же выражения в запросах, вьюхах, функциях. Забыл обновить — привет баги. С виртуальными колонками логика всегда в одном месте, и данные остаются консистентными.

Пример:


create table users (
id serial primary key,
name text not null,
-- stored: пишется на диск, индексируется
name_upper text
generated always as (upper(name)) stored,
-- virtual: считается на лету
name_lower text
generated always as (lower(name)) virtual
);


name_upper отлично индексировать, name_lower — не занимает места и моментально добавляется даже в огромную таблицу.

А вот более практичный сценарий — полнотекстовый поиск на нескольких языках:


create table docs (
id serial primary key,
body text not null,
body_fts_simple tsvector
generated always as (to_tsvector('simple', body)) stored,
body_fts_en tsvector
generated always as (to_tsvector('english', body)) stored,
body_fts_el tsvector
generated always as (to_tsvector('greek', body)) stored
);

create index on docs using gin (body_fts_simple);
create index on docs using gin (body_fts_en);
create index on docs using gin (body_fts_el);


Теперь поиск по разным языкам не требует триггеров и всегда синхронизирован с данными.

Итого:

* virtual — для лёгких выражений, быстрых экспериментов и JSON-поля без дублирования.
* stored — для тяжёлых вычислений, которые нужны в индексах.

#postgres@go_for_devs
🔥92👍2
🛠 Разработка RESTful API на Go и Gin

Всего за несколько шагов вы напишете простой веб-сервис, который умеет возвращать список джазовых альбомов, добавлять новые и находить альбом по ID.

Отличный старт для знакомства с Gin!

📚 Подробности на Хабр: https://habr.com/ru/articles/947528/
🔥62👍2
🚀 Go уверенно держит позиции в топ-10: Tiobe index

Go снова в центре внимания — язык стабильно занимает 8-е место в TIOBE Index. Если вспомнить, что в 2015 году он был только на 58-й строчке, а в 2010 вообще на 183-й — прогресс впечатляющий!

Да, доля Go (2.32%) почти не изменилась за год, но это как раз показатель зрелости: язык прочно закрепился среди лидеров и продолжает расти за счёт экосистемы и востребованности в разработке высоконагруженных сервисов.

Источник.

#news@go_for_devs
🔥43👍3👎1
🗑 Сборщик мусора в Go. Часть 1: Stop The World, пейсинг и оптимизация

Команда Go for Devs подготовила перевод статьи о том, как работает сборщик мусора в Go.

Автор подробно объясняет семантику алгоритма триколорной маркировки и очистки, механизмы Stop The World, пейсинг и источники задержек.

Главное — не бороться со сборщиком, а работать с ним в унисон: устранять лишние выделения и снижать нагрузку на кучу.

📚 Подробности на Хабр: https://habr.com/ru/articles/946774/
Please open Telegram to view this post
VIEW IN TELEGRAM
5👍3🔥2
📊 Go Survey 2025: расскажи, как тебе живётся с Go

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

Опрос открыт до 30 сентября. 10–20 минут — и готово. В ноябре команда опубликует не только результаты, но и сырые данные — сможете покопаться сами. Мы тоже их проанализируем, так что давайте сделаем срез мнений русскоязычного комьюнити максимально полным.

🤝 Пройти опрос можно тут (нужен VPN)
Please open Telegram to view this post
VIEW IN TELEGRAM
👍54🔥3