🪲 За пределами отладчика: полное руководство по отладке Go-приложений
В новой статье рассказываем о том, что баги бывают разными: воспроизводимые, случайные, гейзенбаги и конкурентные.
А в арсенале Go-разработчика должны быть — TDD, стратегическое логирование, Delve, git bisect и даже онлайн-отладчик GoTutor.
📚 Подробности на Хабр: https://habr.com/ru/articles/944732/
В новой статье рассказываем о том, что баги бывают разными: воспроизводимые, случайные, гейзенбаги и конкурентные.
А в арсенале Go-разработчика должны быть — TDD, стратегическое логирование, Delve, git bisect и даже онлайн-отладчик GoTutor.
📚 Подробности на Хабр: https://habr.com/ru/articles/944732/
👍4❤2🔥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. Его влияние чувствуется не только в языке, но и в самой культуре разработки — от подхода к простоте кода до принципов открытого сообщества.
Команда 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
Команда 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%
Нет, и никогда не буду
👍3❤1
Forwarded from AI for Devs
This media is not supported in your browser
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
😁3👍2
🫡 Еженедельный дайджест №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-разработчик" от пользователя
@go_for_devs
Для тех, кто был слишком занят на неделе или просто пропустил некоторые посты, публикуем дайджест!
Статьи:
– Как мы выследили регрессию использования памяти в продакшен-сервисах на 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🔥3❤2
Команда 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👍4❤2
🔥 PostgreSQL 18: Виртуальные колонки — меньше кода, больше гибкости
PostgreSQL 18 принёс асинхронный I/O, UUID v7 и ещё кучу полезного. Но фича, которая нас реально радует — виртуальные вычисляемые колонки. Это способ держать бизнес-логику ближе к данным и не плодить триггеры и boilerplate-SQL.
Как было раньше: надо было дублировать одни и те же выражения в запросах, вьюхах, функциях. Забыл обновить — привет баги. С виртуальными колонками логика всегда в одном месте, и данные остаются консистентными.
Пример:
А вот более практичный сценарий — полнотекстовый поиск на нескольких языках:
Теперь поиск по разным языкам не требует триггеров и всегда синхронизирован с данными.
Итого:
* virtual — для лёгких выражений, быстрых экспериментов и JSON-поля без дублирования.
* stored — для тяжёлых вычислений, которые нужны в индексах.
#postgres@go_for_devs
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
🔥9❤2👍2
🛠 Разработка RESTful API на Go и Gin
Всего за несколько шагов вы напишете простой веб-сервис, который умеет возвращать список джазовых альбомов, добавлять новые и находить альбом по ID.
Отличный старт для знакомства с Gin!
📚 Подробности на Хабр: https://habr.com/ru/articles/947528/
Всего за несколько шагов вы напишете простой веб-сервис, который умеет возвращать список джазовых альбомов, добавлять новые и находить альбом по ID.
Отличный старт для знакомства с Gin!
📚 Подробности на Хабр: https://habr.com/ru/articles/947528/
🔥6❤2👍2
🚀 Go уверенно держит позиции в топ-10: Tiobe index
Go снова в центре внимания — язык стабильно занимает 8-е место в TIOBE Index. Если вспомнить, что в 2015 году он был только на 58-й строчке, а в 2010 вообще на 183-й — прогресс впечатляющий!
Да, доля Go (2.32%) почти не изменилась за год, но это как раз показатель зрелости: язык прочно закрепился среди лидеров и продолжает расти за счёт экосистемы и востребованности в разработке высоконагруженных сервисов.
Источник.
#news@go_for_devs
Go снова в центре внимания — язык стабильно занимает 8-е место в TIOBE Index. Если вспомнить, что в 2015 году он был только на 58-й строчке, а в 2010 вообще на 183-й — прогресс впечатляющий!
Да, доля Go (2.32%) почти не изменилась за год, но это как раз показатель зрелости: язык прочно закрепился среди лидеров и продолжает расти за счёт экосистемы и востребованности в разработке высоконагруженных сервисов.
Источник.
#news@go_for_devs
🔥4❤3👍3👎1
Команда 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 запускает ежегодный опрос, чтобы понять, какие боли вас мучают, каких фич не хватает и что стоит улучшить.
Опрос открыт до 30 сентября. 10–20 минут — и готово. В ноябре команда опубликует не только результаты, но и сырые данные — сможете покопаться сами. Мы тоже их проанализируем, так что давайте сделаем срез мнений русскоязычного комьюнити максимально полным.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤4🔥3
🫡 Еженедельный дайджест №3
Для тех, кто был слишком занят на неделе или просто пропустил некоторые посты, публикуем дайджест!
– Создаём CLI-приложение прогноза погоды на Go
– PostgreSQL 18: Виртуальные колонки — меньше кода, больше гибкости
– Разработка RESTful API на Go и Gin
– Go уверенно держит позиции в топ-10: Tiobe index
– Сборщик мусора в Go. Часть 1: Stop The World, пейсинг и оптимизация
– Go Survey 2025: расскажи, как тебе живётся с Go
@go_for_devs
Для тех, кто был слишком занят на неделе или просто пропустил некоторые посты, публикуем дайджест!
– Создаём CLI-приложение прогноза погоды на Go
– PostgreSQL 18: Виртуальные колонки — меньше кода, больше гибкости
– Разработка RESTful API на Go и Gin
– Go уверенно держит позиции в топ-10: Tiobe index
– Сборщик мусора в Go. Часть 1: Stop The World, пейсинг и оптимизация
– Go Survey 2025: расскажи, как тебе живётся с Go
@go_for_devs
❤3👍3🔥3
Как Go 1.24 и Swiss Tables вернули нам 200 гигабайт памяти 😮
Команда Go for Devs подготовила перевод статьи о том, как Go 1.24 с новой реализацией Swiss Tables помог снизить использование памяти в продакшне на сотни гигабайт.
В статье разбирают, что изменилось в реализации map, как это отразилось на профилях памяти, и какие оптимизации в коде дали дополнительный эффект.
📚 Подробности на Хабр: https://habr.com/ru/articles/948860/
Команда Go for Devs подготовила перевод статьи о том, как Go 1.24 с новой реализацией Swiss Tables помог снизить использование памяти в продакшне на сотни гигабайт.
В статье разбирают, что изменилось в реализации map, как это отразилось на профилях памяти, и какие оптимизации в коде дали дополнительный эффект.
📚 Подробности на Хабр: https://habr.com/ru/articles/948860/
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5❤2👍2
🌀 Zero value в Go: меньше кода, меньше багов
Go делает одну крутую вещь за вас — при объявлении переменных они всегда получают предсказуемое zero value:
Многие программисты зря делают
Стоит проектировать типы так, чтобы их zero value сразу был полезен. Например,
То же самое с
Слайсы? Их zero value —
А ещё на nil-указателях можно вызывать методы:
При проектировании своих структур подумайте — что должен делать zero value вашего типа? Если ответ «ничего полезного» — возможно, стоит пересмотреть дизайн.
#go_tips@go_for_devs
Go делает одну крутую вещь за вас — при объявлении переменных они всегда получают предсказуемое zero value:
0, false, "" или nil.Многие программисты зря делают
make() или явно инициализируют структуры, добавляя лишний код. А значит — повышают вероятность появления багов и забытых для инициализации полей.Стоит проектировать типы так, чтобы их zero value сразу был полезен. Например,
sync.Mutex готов к работе «из коробки»:
package main
import "sync"
type MyInt struct {
mu sync.Mutex
val int
}
func main() {
var i MyInt
i.mu.Lock()
i.val++
i.mu.Unlock()
}
То же самое с
bytes.Buffer: можно просто объявить переменную и сразу писать в неё:
package main
import "bytes"
import "io"
import "os"
func main() {
var b bytes.Buffer
b.Write([]byte("Hello world"))
io.Copy(os.Stdout, &b)
}
Слайсы? Их zero value —
nil, но это не мешает их использовать:
package main
import "fmt"
import "strings"
func main() {
// s := make([]string, 0)
// s := []string{}
var s []string
s = append(s, "Hello")
s = append(s, "world")
fmt.Println(strings.Join(s, " "))
}
А ещё на nil-указателях можно вызывать методы:
package main
import "fmt"
type Config struct {
path string
}
func (c *Config) Path() string {
if c == nil {
return "/usr/home"
}
return c.path
}
func main() {
var c1 *Config
var c2 = &Config{
path: "/export",
}
fmt.Println(c1.Path(), c2.Path())
}
При проектировании своих структур подумайте — что должен делать zero value вашего типа? Если ответ «ничего полезного» — возможно, стоит пересмотреть дизайн.
#go_tips@go_for_devs
🔥7👍4❤2
В новой статье узнайте, как оптимизация аллокаций в Go может снизить нагрузку на сборщик мусора и ускорить приложение почти в два раза.
На примере реального веб-приложения разбираемся, как профилировать кучу, находить «горячие» места и убирать лишние аллокации, чтобы снизить задержки и повысить пропускную способность.
📚 Подробности на Хабр: https://habr.com/ru/articles/948864/
Первая статья из серии.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5🔥5👍2