Go for Devs – Telegram
Go for Devs
1.07K subscribers
49 photos
17 videos
64 links
По сотрудничеству пишите в личные сообщения канала.
Download Telegram
🆕 Создаём 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
Как Go 1.24 и Swiss Tables вернули нам 200 гигабайт памяти 😮

Команда 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
🔥52👍2
🌀 Zero value в Go: меньше кода, меньше багов

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👍42
🗑 Сборщик мусора в Go. Часть 2: GC Traces

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

На примере реального веб-приложения разбираемся, как профилировать кучу, находить «горячие» места и убирать лишние аллокации, чтобы снизить задержки и повысить пропускную способность.

📚 Подробности на Хабр: https://habr.com/ru/articles/948864/

Первая статья из серии.
Please open Telegram to view this post
VIEW IN TELEGRAM
5🔥5👍2
🔧 Go + Valgrind: Почему это важно и как это работает?

Если вы разрабатываете низкоуровневый код или работаете с cgo, вам знакомы проблемы с отслеживанием использования памяти и выявлением багов. А вот теперь, внимание: в Go добавили поддержку Valgrind! Должно быть интересно для тех, кто хочет глубже проанализировать поведение программы на уровне памяти.

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

Как это работает? Встроенная в Go сборка теперь будет использовать инструментальные аннотации для отслеживания использования памяти. Вместо того чтобы добавлять заголовки Valgrind в код и полагаться на cgo, разработчики добавили функцию ассемблера, которая генерирует нужные инструкции для клиентских запросов Valgrind. То есть, теперь можно отслеживать стек и пулы памяти в Go-коде, а это, скажем прямо, не всегда легко для инструментов, которые привыкли к стандартному libc.

Зачем это вообще нужно? С помощью Valgrind теперь можно проанализировать, как Go управляет памятью на уровне рантайма. Это откроет новые возможности для мониторинга, поиска утечек памяти и проверки работы криптографических алгоритмов в постоянном времени. Так, например, Go активно использует алгоритмы шифрования в криптографическом дереве. До сих пор не было удобного способа удостовериться, что эти алгоритмы не подвержены тайминг-атакам, но теперь с Valgrind можно будет замерить, нет ли нежелательных зависимостей от времени выполнения операций.

Но стоит отметить, что пока это экспериментальная фича. Разработчики предлагают включить флаг -valgrind, чтобы протестировать нововведения, и при этом признают, что реализация пока не идеальна. Например, если запустить даже простую программу, Valgrind всё равно обнаружит несколько сотен ошибок, из-за отсутствия понимания, как Go работает с памятью. Однако с корректным использованием флагов можно минимизировать эти проблемы и максимально использовать возможности инструмента.

P.S. Примечательно, что поддержка Valgrind в Go прошла мимо обычного процесса обсуждений 😅

Закрытый issue на GitHub
Review PR
Valgrind
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥52
⚡️ Кэширование в Go: ускоряем API без Redis

В статье разбираются основные стратегии кэширования — от Write-Through до Write-Back — и показан пример реализации кэша с TTL на чистом Go.

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

📚 Подробности на Хабр: https://habr.com/ru/articles/948866/
Please open Telegram to view this post
VIEW IN TELEGRAM
4👍3🔥3
🔥 PostgreSQL 18: быстрее в 3 раза без переписывания SQL

На днях вышла новая версия PostgreSQL — и она серьёзно прокачала производительность и удобство работы с БД.

Новая асинхронная I/O подсистема ускоряет до 3х раз чтение данных.
Апгрейды между мажорными версиями теперь станут менее болезнеными — статистика запросов сохраняется, и база не «тупит» после обновления.
Про разработчиков тоже не забыли: виртуальные вычисляемые колонки, умные индексы со skip scan, новый uuidv7() с лучшей производительностью.
Поддержка OAuth 2.0 для аутентификации, более быстрая логическая репликация и улучшенная работа с текстом.

PostgreSQL продолжает эволюционировать. И это радует)

Release Notes на английском
Release Notes на русском
Видео-обзор на русском от Павла Лузанова
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥12👍53
😎 Flight Recorder в Go 1.25 – точечная диагностика без лишних трассировок

В Go 1.25 появился новый инструмент диагностики — flight recorder. Он позволяет заглянуть в последние секунды работы приложения уже после того, как произошла проблема, и точно понять, что случилось «под капотом».

Отличный способ находить тонкие баги и задержки в долгоживущих сервисах без гигабайтов бесполезных трассировок.

📚 Подробности на Хабр: https://habr.com/ru/articles/951216/
👍8🔥52
🐘 Что нового в PostgreSQL 18? Взгляд разработчика

Новый релиз не ограничился громкой подсистемой асинхронного ввода-вывода — он принёс ряд функций, заметных именно в повседневной разработке.

Нативная поддержка UUID v7, виртуальные генерируемые столбцы, расширенные возможности RETURNING и новые средства диагностики делают жизнь разработчиков проще и продуктивнее.

📚 Подробности на Хабр: https://habr.com/ru/articles/951802/
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥841👍1
Forwarded from AI for Devs
This media is not supported in your browser
VIEW IN TELEGRAM
JetBrains встроили Claude Agent прямо в свои IDE

Claude Agent теперь живёт прямо в AI-чате IDE, а под капотом — свежевыпущенный Claude 4.5 Sonnet.

Примечательно, что это первый сторонний агент, официально встроенный в экосистему JetBrains, и он идёт в составе подписки JetBrains AI — доплат не просят. Сделан на Anthropic Agent SDK, поэтому умеет в контекст, тулы, файловые операции и даже исполнение кода. Работает через MCP: агент видит IDE как сервер инструментов, вы — просто переписываетесь в чате.

Кратко об основных возможностях:

🟣 Работа с несколькими файлами: агент показывает предложенные правки в виде диффов прямо в редакторе — удобно сравнить «до/после» и решить, принять или выкинуть.
🟣 Контроль на вашей стороне: без вашего разрешения Claude ничего не тронет — ни файл, ни консоль. Но если достаточно смелые, то можно включить Brave mode и агент пойдет заниматься своими делами без ваших апрувов
🟣 Plan mode: агент сначала опишет шаги и только потом займется реализацией.
🟣 Управление контекстом: можно подкинуть файлы, папки или даже картинки — агент станет отвечать точнее и умнее.

Источник

@ai_for_devs
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥62👍1👎1
🤬 Почему Go до сих пор меня раздражает?

Ошибки на миллиард долларов, загадочный nil, проблемы с памятью и «магия» defer — по мнению автора, всё это делает язык излишне сложным и болезненным.

А стоит ли оно того?

📚 Подробности на Хабр: https://habr.com/ru/articles/951218/
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5😁4👍311👎1
🔥 Coming Soon в Go 1.26: нормальные указатели на значения

Вы точно сталкивались с тем, что указатель на структуру сделать легко, а вот на простое значение вроде int — уже приходится извращаться.


a := 77
b := &a
fmt.Println(*b) // 77


Это работает, но выглядит, мягко говоря, странно.

В Go 1.26 завезут следующее:


a := new(42)
fmt.Println(*a) // 42


То же самое будет работать и для строк, слайсов, даже для результата функции:


s := "hello"
ps := new(s)
fmt.Println(*ps) // hello

type Point struct { X, Y int }
pp := new(Point{X: 5, Y: 7})
fmt.Println(*pp) // {5 7}

f := func() string { return "GoLang" }
pf := new(f())
fmt.Println(*pf) // GoLang


На просторах интернета уже можно найти следующее:

“RIP всем самописным PointerTo[T any](in T) *T — теперь в стандартной библиотеке есть всё необходимое. Маленькое и незаметное изменение, но с огромным профитом.”


Единственный нюанс: new() всегда аллоцирует новое место и кладёт туда копию значения. То есть new(*p) сделает копию того, на что указывает p, а не новый указатель на тот же объект.

👍 Давай еще новостей про грядущий релиз
🔥 Фича топ
👍26🔥12🤔43
😋 Обедающие философы на Go: как не умереть от взаимной блокировки и голодания

В новой статье шаг за шагом решается классическая задача об обедающих философах на Go.

Вы узнаете, почему наивный подход ведёт к взаимной блокировке, как нарушить симметрию, чтобы избежать deadlock’а, и почему даже «рабочее» решение может оставить одного философа голодать вечно.

📚 Подробности на Хабр: https://habr.com/ru/articles/951224/
Please open Telegram to view this post
VIEW IN TELEGRAM
👍43🔥3
🔥 Пишем микросервисы на Go как в BigTech, с нуля

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

Спикер представлил инструменты, которые могут значительно упростить этот процесс:
— gRPC для высокопроизводительного межсервисного взаимодействия;
— gRPC-Gateway для обеспечения совместимости с RESTful API;
— Buf для управления protobuf схемами;
— rk-boot для быстрого старта и стандартизации.

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

В заключение — итоги и рекомендации, как начать внедрение этих инструментов в проекты.

😉 СМОТРЕТЬ НА YOUTUBE
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥4👍32👎1
⚡️ Насколько быстр Go? Симуляция миллионов частиц на смарт-ТВ

Команда Go for Devs подготовила перевод статьи о том, насколько быстрым может быть Go. Автор проверил это на практике — написал симуляцию миллионов частиц с мультиплеером, только на CPU и так, чтобы оно работало даже на смарт-ТВ.

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

📚 Подробности на Хабр: https://habr.com/ru/articles/953434/
👏5👍4🔥21