Go for Devs – Telegram
Go for Devs
1.07K subscribers
49 photos
17 videos
64 links
По сотрудничеству пишите в личные сообщения канала.
Download Telegram
Channel created
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥 Go 1.24 – большое обновление для инструментов: go tools 🛠

В грядущем релизе Go 1.24 (ожидается уже в феврале 2025) появится новая команда go tool, которая значительно упростит работу с проектными инструментами. Это обновление убирает необходимость в обходных решениях вроде tools.go, снижает «раздувание» зависимостей и ускоряет работу за счёт кеширования.

То есть:
🟣 Больше никаких костылей с tools.go
🟣 Более быстрая работа благодаря кешу
🟣 Чище и эффективнее управление зависимостями

Как это работает? Всё очень просто!

Добавить инструмент:


go get -tool github.com/oapi-codegen/oapi-codegen/v2/cmd/oapi-codegen@v2.4.1


Запустить:


go tool github.com/oapi-codegen/oapi-codegen/v2/cmd/oapi-codegen --config=config.yaml openapi.yaml


Посмотреть список доступных инструментов:


go tool


Многие уже называют это одним из самых полезных обновлений для инструментов Go за последние годы: настройка проектов станет заметно проще и удобнее.

📚 Официальную документацию можно найти в заметках к релизу Go 1.24
Please open Telegram to view this post
VIEW IN TELEGRAM
👍54🔥4
🎬 What’s new in Go 1.24 (Google for Developers)

Нашли, чем заняться вечером — погрузитесь в нововведения Go 1.24: от пост‑квантовой криптографии до полной поддержки обобщённых типовых псевдонимов, от усовершенствований кеширования инструментов до новых возможностей стандартной библиотеки.

😉 СМОТРЕТЬ НА YOUTUBE
Please open Telegram to view this post
VIEW IN TELEGRAM
5👍4🔥4
🙈 Будьте осторожны с Struct Embedding в Go

В Go есть механизм встраивания структур (struct embedding), который позволяет составлять типы. Примерно это выглядит так:


type Position struct {
X int
Y int
}

type Colour struct {
R byte
G byte
B byte
}

type Rectangle struct {
Position
Colour

Width int
Height int
}

r := Rectangle{/* ... */}

// This works:
fmt.Printf("%d,%d\n", r.Position.X, r.Position.Y)

// but so does this:
fmt.Printf("%d,%d\n", r.X, r.Y)


А как вы думаете, что делает этот код?


type FooService struct {
URL string
}

type BarConnectionOptions struct {
URL string
}

type BarService struct {
BarConnectionOptions
}

type Options struct {
FooService
BarService
}

opts := Options{
FooService: FooService{URL: "abc.com"},
BarService: BarService{
BarConnectionOptions: BarConnectionOptions{
URL: "xyz.com",
},
},
}

fmt.Println(opts.URL)


Я бы ожидал, что компиляция упадет из-за неоднозначности поля URL. На самом деле программа выводит abc.com, по всей видимости, выбирая наименее вложенную версию этого поля. Такое у нас случилось на работе, к счастью, это поймали тесты. Будьте внимательны при встраивании структур!
👍64🔥4
🛠 Generic интерфейсы в Go: просто, но сложно

Команда Go for Devs подготовила перевод статьи Акселя Вагнера о том, как generic интерфейсы в Go открывают новые возможности и новые сложности.

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

📚 Подробности на Хабр: https://habr.com/ru/articles/942634/
Please open Telegram to view this post
VIEW IN TELEGRAM
5👍4🔥4
🔥 Что нового в GoLand 2025.2?

В этом релизе — умное выявление ошибок с помощью анализа потоков данных, неблокирующий экран приветствия, улучшенный поиск HTTP-эндпоинтов и ускоренный AI-агент Junie.

А ещё — апгрейд JetBrains AI Assistant и свежие функции, унаследованные от IntelliJ IDEA, WebStorm и DataGrip.

📚 Подробности на Хабр: https://habr.com/ru/articles/942868/
Please open Telegram to view this post
VIEW IN TELEGRAM
👍43🔥2
Как проверить время и асинхронный код в Go?

Команда Go for Devs подготовила перевод статьи о пакете synctest, который с Go 1.25 стал частью стандартной библиотеки.

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

📚 Подробности на Хабр: https://habr.com/ru/articles/943412/
Please open Telegram to view this post
VIEW IN TELEGRAM
3👍3🔥2
🚀 Вышли минорные релизы Go — 1.25.1 и 1.24.7!

В обновлениях исправлена одна уязвимость в соответствии с политикой безопасности Go:

🟣 net/http: CrossOriginProtection bypass patterns
При использовании CrossOriginProtection.AddInsecureBypassPattern запросы, которые должны были редиректиться (например, без завершающего слэша), также попадали в список исключений. Это могло привести к неожиданному поведению. Уязвимость зарегистрирована как CVE-2025-47910 (Go issue #75054).

⬇️ Скачать бинарные и исходные сборки можно на тут.

#release #minor
Please open Telegram to view this post
VIEW IN TELEGRAM
3👍3🔥2
🧠 Оптимизация памяти в Go: 20 приёмов для эффективных приложений

Команда Go for Devs подготовила перевод статьи о том, как оптимизировать использование памяти в Go-приложениях.

Автор делится двадцатью приёмами — от выбора ресивера метода и правильной инициализации slice до кастомного управления памятью и профилирования с pprof.

TL;DR: мелкие улучшения складываются в заметный прирост производительности и стабильности.

📚 Подробности на Хабр: https://habr.com/ru/articles/943664/
4👍2🔥2
🌍 Как превратить SQL в полноценный API прямо в Go?

В новой статье делимся информацией о том, как можно безопасно принимать WHERE-условия в виде SQL-подзапросов, валидировать их и использовать для запросов к базе.

Просто, элегантно и почти без лишнего кода.

📚 Подробности на Хабр: https://habr.com/ru/articles/943744/
👍3🔥31😁1
🫡 Еженедельный дайджест №1

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

Generic интерфейсы в Go: просто, но сложно
Что нового в GoLand 2025.2?
Как проверить время и асинхронный код в Go?
Вышли минорные релизы Go — 1.25.1 и 1.24.7
Оптимизация памяти в Go: 20 приёмов для эффективных приложений
Как превратить SQL в полноценный API прямо в Go?

Самый популярный комментарий этой недели – комментарий к статье "Generic интерфейсы в Go: просто, но сложно" от пользователя @AuToMaton:

А в старое время это делалось иначе. Никто никаких паттернов не обсуждал и не придумывал, все делали по простому. А когда замечали что делают одно и то же трижды, смотрели на написанное и устраняли дублирование.


@go_for_devs
👍43🔥3
🔥 Как мы выследили регрессию использования памяти в продакшен-сервисах на Go 1.24

Команда Go for Devs подготовила перевод статьи о том, как команда инженеров выявила регрессию использования памяти в Go 1.24.

Оказалось, что всего одна оптимизация в аллокаторе памяти, случайно потерянная при рефакторинге, заставляла Go «съедать» сотни мегабайт RAM.

Но сообщество Go-разработчиков быстро нашло и устранило проблему 🫡

📚 Подробности на Хабр: https://habr.com/ru/articles/944718/
👍42🔥2
🤷 Зачем в Go интерфейсы требуют точного совпадения?

В Go компилятор иногда автоматически преобразовывает значение тика к указателю на этот тип. Если вызвать метод с pointer-receiver на значении, всё будет работать:


type User struct {
Name string
}

func (u *User) SetName(name string) {
u.Name = name
}

func (u User) PrintName() {
fmt.Println(u.Name)
}

var u User
u.SetName("Alice") // Go превратил это в (&u).SetName("Alice")
u.PrintName() // Обычный value-receiver


Но стоит подключить интерфейсы — и магия исчезает:


type Named interface {
SetName(string)
PrintName()
}

var u User
var n Named

n = &u // OK: *User реализует оба метода
n = u // Ошибка: User не имеет SetName


Почему так?

У User (значения) в method set только методы с value-receiver. У *User — и value-, и pointer-receiver. Автоматическое «взятие адреса» при работе с интерфейсами запрещено, потому что интерфейс хранит копию значения, а не сам объект.

Копия:
* неадресуемая,
* неизменяемая.

Если бы мы могли взять &n.(User), получили бы указатель на временную копию внутри интерфейса, которая теряется при новом присваивании. Это небезопасно.

Итог

* Интерфейсы всегда копируют значение.
* Копия не имеет адреса и не может изменяться.
* Поэтому Go не делает auto-addressing, и method set интерфейса и method set конкретного значения должны строго совпадать.
6👍6🔥2
🔝 Топ 5 возможностей Gin, которые должен знать каждый Go-разработчик

Даже если вы давно пишете API на Go, в арсенале Gin есть несколько приёмов, которые сделают ваш код быстрее, надёжнее и проще в сопровождении.

От кастомных валидаторов до graceful shutdown — фишки, о которых знают не все.

📚 Подробности на Хабр: https://habr.com/ru/articles/944724/
Please open Telegram to view this post
VIEW IN TELEGRAM
4👍2🔥2