🔥 Go 1.24 – большое обновление для инструментов: go tools 🛠
В грядущем релизе Go 1.24 (ожидается уже в феврале 2025) появится новая команда
То есть:
🟣 Больше никаких костылей с
🟣 Более быстрая работа благодаря кешу
🟣 Чище и эффективнее управление зависимостями
Как это работает? Всё очень просто!
Добавить инструмент:
Запустить:
Посмотреть список доступных инструментов:
Многие уже называют это одним из самых полезных обновлений для инструментов Go за последние годы: настройка проектов станет заметно проще и удобнее.
📚 Официальную документацию можно найти в заметках к релизу Go 1.24
В грядущем релизе 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
👍5❤4🔥4
Нашли, чем заняться вечером — погрузитесь в нововведения Go 1.24: от пост‑квантовой криптографии до полной поддержки обобщённых типовых псевдонимов, от усовершенствований кеширования инструментов до новых возможностей стандартной библиотеки.
Please open Telegram to view this post
VIEW IN TELEGRAM
YouTube
What's new in Go
There’s a lot to love about Go 1.24, including support for post-quantum cryptography, full support for generic type aliases, and several performance improvements to the Go runtime that significantly decrease CPU overhead for most applications. Learn what’s…
❤5👍4🔥4
🙈 Будьте осторожны с Struct Embedding в Go
В Go есть механизм встраивания структур (struct embedding), который позволяет составлять типы. Примерно это выглядит так:
А как вы думаете, что делает этот код?
Я бы ожидал, что компиляция упадет из-за неоднозначности поля URL. На самом деле программа выводит
В 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, по всей видимости, выбирая наименее вложенную версию этого поля. Такое у нас случилось на работе, к счастью, это поймали тесты. Будьте внимательны при встраивании структур!👍6❤4🔥4
🛠 Generic интерфейсы в Go: просто, но сложно
Команда Go for Devs подготовила перевод статьи Акселя Вагнера о том, как generic интерфейсы в Go открывают новые возможности и новые сложности.
В статье разбираются паттерны, ограничения и компромиссы: от self reference интерфейсов до дилеммы с ресивер-указателями.
📚 Подробности на Хабр: https://habr.com/ru/articles/942634/
Команда Go for Devs подготовила перевод статьи Акселя Вагнера о том, как generic интерфейсы в Go открывают новые возможности и новые сложности.
В статье разбираются паттерны, ограничения и компромиссы: от self reference интерфейсов до дилеммы с ресивер-указателями.
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/
В этом релизе — умное выявление ошибок с помощью анализа потоков данных, неблокирующий экран приветствия, улучшенный поиск HTTP-эндпоинтов и ускоренный AI-агент Junie.
А ещё — апгрейд JetBrains AI Assistant и свежие функции, унаследованные от IntelliJ IDEA, WebStorm и DataGrip.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4❤3🔥2
⏳ Как проверить время и асинхронный код в Go?
Команда Go for Devs подготовила перевод статьи о пакете
Он позволяет писать быстрые и надёжные тесты для конкурентного кода, не усложняя сам код. Теперь асинхронные операции можно проверять без долгих ожиданий и флаки-тестов.
📚 Подробности на Хабр: https://habr.com/ru/articles/943412/
Команда Go for Devs подготовила перевод статьи о пакете
synctest, который с Go 1.25 стал частью стандартной библиотеки. Он позволяет писать быстрые и надёжные тесты для конкурентного кода, не усложняя сам код. Теперь асинхронные операции можно проверять без долгих ожиданий и флаки-тестов.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3👍3🔥2
В обновлениях исправлена одна уязвимость в соответствии с политикой безопасности Go:
При использовании
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-приложениях.
Автор делится двадцатью приёмами — от выбора ресивера метода и правильной инициализации
TL;DR: мелкие улучшения складываются в заметный прирост производительности и стабильности.
📚 Подробности на Хабр: https://habr.com/ru/articles/943664/
Команда Go for Devs подготовила перевод статьи о том, как оптимизировать использование памяти в Go-приложениях.
Автор делится двадцатью приёмами — от выбора ресивера метода и правильной инициализации
slice до кастомного управления памятью и профилирования с pprof. 📚 Подробности на Хабр: https://habr.com/ru/articles/943664/
❤4👍2🔥2
🌍 Как превратить SQL в полноценный API прямо в Go?
В новой статье делимся информацией о том, как можно безопасно принимать
Просто, элегантно и почти без лишнего кода.
📚 Подробности на Хабр: https://habr.com/ru/articles/943744/
В новой статье делимся информацией о том, как можно безопасно принимать
WHERE-условия в виде SQL-подзапросов, валидировать их и использовать для запросов к базе. Просто, элегантно и почти без лишнего кода.
📚 Подробности на Хабр: https://habr.com/ru/articles/943744/
👍3🔥3❤1😁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
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
😁4👍3🔥2
🫡 Еженедельный дайджест №1
Для тех, кто был слишком занят на неделе или просто пропустил некоторые посты, публикуем дайджест!
– Generic интерфейсы в Go: просто, но сложно
– Что нового в GoLand 2025.2?
– Как проверить время и асинхронный код в Go?
– Вышли минорные релизы Go — 1.25.1 и 1.24.7
– Оптимизация памяти в Go: 20 приёмов для эффективных приложений
– Как превратить SQL в полноценный API прямо в Go?
Самый популярный комментарий этой недели – комментарий к статье "Generic интерфейсы в Go: просто, но сложно" от пользователя
@go_for_devs
Для тех, кто был слишком занят на неделе или просто пропустил некоторые посты, публикуем дайджест!
– Generic интерфейсы в Go: просто, но сложно
– Что нового в GoLand 2025.2?
– Как проверить время и асинхронный код в Go?
– Вышли минорные релизы Go — 1.25.1 и 1.24.7
– Оптимизация памяти в Go: 20 приёмов для эффективных приложений
– Как превратить SQL в полноценный API прямо в Go?
Самый популярный комментарий этой недели – комментарий к статье "Generic интерфейсы в Go: просто, но сложно" от пользователя
@AuToMaton:А в старое время это делалось иначе. Никто никаких паттернов не обсуждал и не придумывал, все делали по простому. А когда замечали что делают одно и то же трижды, смотрели на написанное и устраняли дублирование.
@go_for_devs
👍4❤3🔥3
🔥 Как мы выследили регрессию использования памяти в продакшен-сервисах на Go 1.24
Команда Go for Devs подготовила перевод статьи о том, как команда инженеров выявила регрессию использования памяти в Go 1.24.
Оказалось, что всего одна оптимизация в аллокаторе памяти, случайно потерянная при рефакторинге, заставляла Go «съедать» сотни мегабайт RAM.
Но сообщество Go-разработчиков быстро нашло и устранило проблему 🫡
📚 Подробности на Хабр: https://habr.com/ru/articles/944718/
Команда Go for Devs подготовила перевод статьи о том, как команда инженеров выявила регрессию использования памяти в Go 1.24.
Оказалось, что всего одна оптимизация в аллокаторе памяти, случайно потерянная при рефакторинге, заставляла Go «съедать» сотни мегабайт RAM.
📚 Подробности на Хабр: https://habr.com/ru/articles/944718/
👍4❤2🔥2
🤷 Зачем в Go интерфейсы требуют точного совпадения?
В Go компилятор иногда автоматически преобразовывает значение тика к указателю на этот тип. Если вызвать метод с pointer-receiver на значении, всё будет работать:
Но стоит подключить интерфейсы — и магия исчезает:
Почему так?
У
Копия:
* неадресуемая,
* неизменяемая.
Если бы мы могли взять
Итог
* Интерфейсы всегда копируют значение.
* Копия не имеет адреса и не может изменяться.
* Поэтому Go не делает auto-addressing, и method set интерфейса и method set конкретного значения должны строго совпадать.
В 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