🚀 Вышел Go 1.25 — полгода работы Google и сообщества.
Go сочетает скорость компилируемых языков с простотой скриптовых: лаконичный синтаксис, быстрый цикл разработки, защита от ошибок. Код компилируется в нативные бинарники без виртуальной машины, с интеграцией инструментов профилирования и отладки. Язык изначально оптимизирован под многопоточность и многоядерные системы, включая встроенные средства параллельных вычислений, безопасную работу с памятью и сборщик мусора.
🔹 Главные новшества:
- Экспериментальный GC greenteagc — до 10–40% меньше накладных расходов при создании и сканировании мелких объектов.
- Новые экспериментальные пакеты:
-
-
- Новый пакет
- В
- В
-
- Компилятор и линковщик научились генерировать отладочную информацию в формате DWARF5 (компактнее и эффективнее).
- Release notes: https://go.dev/doc/go1.25
- Скачать: https://go.dev/dl/#go1.25.0
Go сочетает скорость компилируемых языков с простотой скриптовых: лаконичный синтаксис, быстрый цикл разработки, защита от ошибок. Код компилируется в нативные бинарники без виртуальной машины, с интеграцией инструментов профилирования и отладки. Язык изначально оптимизирован под многопоточность и многоядерные системы, включая встроенные средства параллельных вычислений, безопасную работу с памятью и сборщик мусора.
🔹 Главные новшества:
- Экспериментальный GC greenteagc — до 10–40% меньше накладных расходов при создании и сканировании мелких объектов.
- Новые экспериментальные пакеты:
-
encoding/json/v2
— переработанная, высокопроизводительная реализация encoding/json
.-
encoding/json/jsontext
— низкоуровневая обработка синтаксиса JSON.- Новый пакет
testing/synctest
для тестирования синхронизации потоков.- В
go build
по умолчанию включена опция -asan
для проверки утечек памяти.- В
go vet
добавлены анализаторы waitgroup
и hostport
для поиска ошибок в sync.WaitGroup.Add
и форматировании адресов.-
GOMAXPROCS
теперь учитывает ограничения CPU в контейнерах.- Компилятор и линковщик научились генерировать отладочную информацию в формате DWARF5 (компактнее и эффективнее).
- Release notes: https://go.dev/doc/go1.25
- Скачать: https://go.dev/dl/#go1.25.0
🔥12❤7👍5😁1
Forwarded from Golang
📘 "Go 101" популярная серия бесплатных книг обновлена под новую версию Golang 1.25 — сразу в четырёх разделах:
• 🚀 Go Optimizations 101: https://go101.org/optimizations/101.html
• 💡 Go Details & Tips 101: https://go101.org/details-and-tips/101.html
• 🔧 Go Generics 101: https://go101.org/generics/101.html
• 📖 Go 101: https://go101.org/article/101.html
@golang_google
#golang #freebook #education #book #go
• 🚀 Go Optimizations 101: https://go101.org/optimizations/101.html
• 💡 Go Details & Tips 101: https://go101.org/details-and-tips/101.html
• 🔧 Go Generics 101: https://go101.org/generics/101.html
• 📖 Go 101: https://go101.org/article/101.html
@golang_google
#golang #freebook #education #book #go
❤12👍8🔥3🥰1
Forwarded from Golang
💥 Необычное поведение структур
В недавнем блоге Мэтта Холла поднята важная деталь, о которой некоторые забывают.
Автор показывает, что при встраивании (`embedding`) структур Go может выбрать неочевидное поле, даже если кажется, что это вызовет ошибку.
Пример:
Вы думаете, тут компиляция не пройдёт из-за неоднозначности?
Но, она завершится успешна — и начпечатает abc.com.
Go выбирает наименее вложенное поле URL, в данном случае FooService.URL.
⚠ Урок: будьте осторожны с struct embedding! Переиспользование полей может скрывать баги, особенно когда поля именованы одинаково, а уровни вложенности различны.
📌 Пост
@golang_google
#golang #go
В недавнем блоге Мэтта Холла поднята важная деталь, о которой некоторые забывают.
Автор показывает, что при встраивании (`embedding`) структур Go может выбрать неочевидное поле, даже если кажется, что это вызовет ошибку.
Пример:
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)
Вы думаете, тут компиляция не пройдёт из-за неоднозначности?
Но, она завершится успешна — и начпечатает abc.com.
Go выбирает наименее вложенное поле URL, в данном случае FooService.URL.
⚠ Урок: будьте осторожны с struct embedding! Переиспользование полей может скрывать баги, особенно когда поля именованы одинаково, а уровни вложенности различны.
📌 Пост
@golang_google
#golang #go
👍11😁4❤3
📚 Кейс: как ВКонтакте переобучила часть команды на Go
ВКонтакте переходит на сервисную архитектуру и переводит бэкенд на Go. Главная задача — построить высоконагруженную распределенную систему, где каждая команда автономно разрабатывает свой сервис.
🔹 Технические вызовы
Перепроектирование архитектуры с учётом PaaS-платформы.
Интеграции с внутренними сервисами.
🔹 Программа переобучения для внутренних сотрудников
140+ инженеров из компании прошли интерактивный курс по переходу на Go
Синтаксис Go изучали самостоятельно — курс сразу начинался с архитектурных и инфраструктурных задач
Практика: проектирование каркаса микросервиса в условиях, максимально приближенных к реальным задачам компании
💡 Вывод: кейс ВКонтакте показывает, как знания о продукте сохраняются внутри компании, почему эффективнее инвестировать в собственников сотрудников, а не распыляться в найме.
#golang #microservices @golang_books
ВКонтакте переходит на сервисную архитектуру и переводит бэкенд на Go. Главная задача — построить высоконагруженную распределенную систему, где каждая команда автономно разрабатывает свой сервис.
🔹 Технические вызовы
Перепроектирование архитектуры с учётом PaaS-платформы.
Интеграции с внутренними сервисами.
🔹 Программа переобучения для внутренних сотрудников
140+ инженеров из компании прошли интерактивный курс по переходу на Go
Синтаксис Go изучали самостоятельно — курс сразу начинался с архитектурных и инфраструктурных задач
Практика: проектирование каркаса микросервиса в условиях, максимально приближенных к реальным задачам компании
💡 Вывод: кейс ВКонтакте показывает, как знания о продукте сохраняются внутри компании, почему эффективнее инвестировать в собственников сотрудников, а не распыляться в найме.
#golang #microservices @golang_books
🔥12❤6👍3😁1🤬1
Команда Ozon Tech готовит мощнейший трек по бэкенду в рамках своей конференции E-CODE 💙
И это только одна из причин, почему стоит быть там 13-14 сентября. А ещё: качественный нетворк, 1х1 с топовыми IT-экспертами и HR, эксклюзивный мерч и интерактивы, вечеринки с участием НТР, Заточки, ILWT и Нейромонаха Феофана.
Успейте зарегистрироваться. Это обязательно⬅
И это только одна из причин, почему стоит быть там 13-14 сентября. А ещё: качественный нетворк, 1х1 с топовыми IT-экспертами и HR, эксклюзивный мерч и интерактивы, вечеринки с участием НТР, Заточки, ILWT и Нейромонаха Феофана.
Успейте зарегистрироваться. Это обязательно
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
⚡ Интересный факт про работу Go
Обычно неиспользуемые методы в проекте не попадают в итоговый бинарник.
Но если в коде есть хотя бы один вызов
в бинарь будут скомпилированы все методы, даже неиспользуемые.
https://github.com/golang/go/issues/62024
#golang #programming #reflection
Обычно неиспользуемые методы в проекте не попадают в итоговый бинарник.
Но если в коде есть хотя бы один вызов
MethodByName
через reflection — в бинарь будут скомпилированы все методы, даже неиспользуемые.
https://github.com/golang/go/issues/62024
#golang #programming #reflection
❤8👍7🥰2🔥1
🧑💻 Хотите прокачать знания Go?
Для вас — новый бесплатный курс Академии Selectel
После изучения вы сможете:
▪️запускать fuzzing-тесты,
▪️писать собственный REST API,
▪️разрабатывать gRPC-приложения,
▪️подключать Go к Apache Kafka,
▪️тестировать Kubernetes с помощью Go.
А еще получите подборку дополнительных материалов — книг, подкастов и блогов, которые позволят лучше разобраться в теме.
Начните обучение прямо сейчас: https://slc.tl/ovswp
Реклама. АО «Селектел», ИНН 7810962785, ERID: 2VtzqwTYVtW
Для вас — новый бесплатный курс Академии Selectel
После изучения вы сможете:
▪️запускать fuzzing-тесты,
▪️писать собственный REST API,
▪️разрабатывать gRPC-приложения,
▪️подключать Go к Apache Kafka,
▪️тестировать Kubernetes с помощью Go.
А еще получите подборку дополнительных материалов — книг, подкастов и блогов, которые позволят лучше разобраться в теме.
Начните обучение прямо сейчас: https://slc.tl/ovswp
Реклама. АО «Селектел», ИНН 7810962785, ERID: 2VtzqwTYVtW
🔥4
Forwarded from Golang
🧠 CasCache — CAS-безопасный кэш для Go с валидацией чтения и «bulk»-наборов
Что это
- Кэш «как CAS»: записи защищены поколениями (generation). Запись проходит только если поколение ключа не изменилось.
- Singles: никогда не вернёт «протухшее» значение; битые/чужого типа записи самовосстанавливаются (самоочистка).
- Bulk: кэширует набор ключей; при чтении каждый элемент сверяется с актуальным поколением — если хоть один устарел, весь набор отбрасывается и читается по одиночке.
- Подключаемые провайдеры значений: Ristretto / BigCache / Redis.
- Подключаемые кодеки: JSON/Msgpack/CBOR/Proto (можно навесить компрессию/шифрование).
- Distributed GenStore (опционально): хранит поколения в Redis для корректности между репликами и переживания рестартов.
Зачем это нужно
- Без «грязных» чтений при гонках читателя/писателя.
- Нулевая «write amplification» при чтении — валидация только на чтении.
- Гибкий выбор провайдера/кодека, можно начать локально и дорастить до кластера (с общим GenStore).
Быстрый старт
📌Репозиторий: github.com/unkn0wn-root/cascache
Что это
- Кэш «как CAS»: записи защищены поколениями (generation). Запись проходит только если поколение ключа не изменилось.
- Singles: никогда не вернёт «протухшее» значение; битые/чужого типа записи самовосстанавливаются (самоочистка).
- Bulk: кэширует набор ключей; при чтении каждый элемент сверяется с актуальным поколением — если хоть один устарел, весь набор отбрасывается и читается по одиночке.
- Подключаемые провайдеры значений: Ristretto / BigCache / Redis.
- Подключаемые кодеки: JSON/Msgpack/CBOR/Proto (можно навесить компрессию/шифрование).
- Distributed GenStore (опционально): хранит поколения в Redis для корректности между репликами и переживания рестартов.
Зачем это нужно
- Без «грязных» чтений при гонках читателя/писателя.
- Нулевая «write amplification» при чтении — валидация только на чтении.
- Гибкий выбор провайдера/кодека, можно начать локально и дорастить до кластера (с общим GenStore).
Быстрый старт
import (
"context"
"time"
"github.com/unkn0wn-root/cascache"
rp "github.com/unkn0wn-root/cascache/provider/ristretto"
)
type User struct{ ID, Name string }
func buildCache() cascache.CAS[User] {
rist, _ := rp.New(rp.Config{
NumCounters: 1_000_000,
MaxCost: 64 << 20,
BufferItems: 64,
Metrics: false,
})
cc, _ := cascache.New[User](cascache.Options[User]{
Namespace: "user",
Provider: rist,
Codec: cascache.JSONCodec[User]{},
DefaultTTL: 5 * time.Minute,
BulkTTL: 5 * time.Minute,
// GenStore: nil → локально; для кластера подключите Redis GenStore.
})
return cc
}
func readUser(ctx context.Context, c cascache.CAS[User], id string) (User, bool) {
if u, ok, _ := c.Get(ctx, id); ok { return u, true }
obs := c.SnapshotGen(id) // снять поколение ДО чтения БД
u := loadFromDB(id)
_ = c.SetWithGen(ctx, id, u, obs, 0) // запись пройдёт только если поколение не изменилось
return u, true
}
📌Репозиторий: github.com/unkn0wn-root/cascache
👍5🔥2
Топ GitHub: тысячи книг и курсов по программированию на множестве языков.
Здесь есть:
— Есть материалы по абсолютно всем темам: от ML и алгоритмов до Go, C#, баз данных и даже no-code;
— Англоязычная база, сравнимая с отдельным университетом;
— Мощный сегмент на русском языке;
— Регулярные обновления;
— Бесплатные курсы, чтобы сразу закреплять практикой.
Этот репозиторий давно стал культовым: сотни тысяч звёзд, почти 3000 контрибьюторов, поддержка некоммерческой Free Ebook Foundation.
https://github.com/EbookFoundation/free-programming-books
Здесь есть:
— Есть материалы по абсолютно всем темам: от ML и алгоритмов до Go, C#, баз данных и даже no-code;
— Англоязычная база, сравнимая с отдельным университетом;
— Мощный сегмент на русском языке;
— Регулярные обновления;
— Бесплатные курсы, чтобы сразу закреплять практикой.
Этот репозиторий давно стал культовым: сотни тысяч звёзд, почти 3000 контрибьюторов, поддержка некоммерческой Free Ebook Foundation.
https://github.com/EbookFoundation/free-programming-books
🔥6👍3🥰1
Автор: Tim Boring
Год издания: 2024
Язык: Английский
Описание:
Системы оркестрации, такие как Kubernetes, могут показаться "черным ящиком": вы размещаете их в облаке, и оно волшебным образом обрабатывает все, что вам нужно. Это может показаться идеальным решением, пока что—то не пойдет не так, и вы не будете знать, как найти и устранить свои проблемы. Создание оркестратора на Go (с нуля) раскрывает внутреннюю работу фреймворков оркестровки, помогая вам создавать свой собственный.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16🔥9🥰1😁1
VK JT = Java + Go!
16 сентября VK приглашает Go‑ и Java‑разработчиков на VK JT Meetup в Санкт-Петербурге.
В программе:
— Максимально практические доклады от техлидов VK о трансформации ВКонтакте, переходе части сервисов на Go и об устройстве и развитии единой видеоплатформы VK
— Командные бэкенд-баттлы под менторством опытных разработчиков VK — кейсы, вдохновлённые реальной архитектурой VK
Задавайте вопросы экспертам, ищите лучшее командное решение кейса и оставайтесь на афтепати: нетворкинг, фуршет, свободное общение с коллегами.
Только офлайн, в офисе VK на Мойке.
🎟 Участие бесплатное, почитать подробнее и зарегистрироваться вы сможете на сайте
16 сентября VK приглашает Go‑ и Java‑разработчиков на VK JT Meetup в Санкт-Петербурге.
В программе:
— Максимально практические доклады от техлидов VK о трансформации ВКонтакте, переходе части сервисов на Go и об устройстве и развитии единой видеоплатформы VK
— Командные бэкенд-баттлы под менторством опытных разработчиков VK — кейсы, вдохновлённые реальной архитектурой VK
Задавайте вопросы экспертам, ищите лучшее командное решение кейса и оставайтесь на афтепати: нетворкинг, фуршет, свободное общение с коллегами.
Только офлайн, в офисе VK на Мойке.
🎟 Участие бесплатное, почитать подробнее и зарегистрироваться вы сможете на сайте
❤2
Как на Go создать Validating Admission Controller для Kubernetes.
Это веб‑hook, который проверяет, что в каждом контейнере деплоя указаны
Автор подробно проходит через архитектуру (mutating → validating), код на Go для обработки
👉 Читать
Это веб‑hook, который проверяет, что в каждом контейнере деплоя указаны
memory.requests
и memory.limits
. Если хоть одно из них отсутствует — создание ресурса блокируется.Автор подробно проходит через архитектуру (mutating → validating), код на Go для обработки
AdmissionReview
, настройку TLS, манифесты для Deployment и Webhook-а, и тестирование в кластере.👉 Читать
👍3❤2
🫵 Хотите освоить новый язык программирования и увидеть результат уже на первом занятии?
Приглашаем на открытый урок «Hello, Go! С нуля до первого кода за 1,5 часа». За 90 минут вместе с практикующим экспертом вы установите Go, разберётесь с базовым синтаксисом и напишете свою первую программу.
❗️ Этот урок — идеальный старт для тех, кто давно хотел попробовать Golang: никаких сложных терминов, только полезные приёмы и понятные примеры. Узнаете, как устроены пакеты, функции, переменные и запустите своё приложение. А в конце получите пошаговый план дальнейшего изучения Go.
Встречаемся 4 сентября в 20:00 МСК. Участие бесплатно.
Регистрация открыта: https://otus.pw/L3i9/
Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ", ИНН: 9705100963
Приглашаем на открытый урок «Hello, Go! С нуля до первого кода за 1,5 часа». За 90 минут вместе с практикующим экспертом вы установите Go, разберётесь с базовым синтаксисом и напишете свою первую программу.
❗️ Этот урок — идеальный старт для тех, кто давно хотел попробовать Golang: никаких сложных терминов, только полезные приёмы и понятные примеры. Узнаете, как устроены пакеты, функции, переменные и запустите своё приложение. А в конце получите пошаговый план дальнейшего изучения Go.
Встречаемся 4 сентября в 20:00 МСК. Участие бесплатно.
Регистрация открыта: https://otus.pw/L3i9/
Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ", ИНН: 9705100963
❤2
Если вы пишете тесты на Go, есть одна мощная хитрость, о которой мало кто знает. Это займет 30 секунд.
Вместо привычного:
Преимущества:
- Мгновенный фокус на «что получили» (got) и «что ожидали» (want) — глаза сразу видят суть.
- Отлично подходит для table-driven тестов — компактность и читаемость.
- Упрощённое копирование/вставка проверок — не забудете обновить сообщение об ошибке.
MT Lynch
**Чёткое разделение: if got, want := — это всегда проверка, любые другие if — логика теста.
Универсальная, аккуратная и не требует дополнительных библиотек — просто Go‑идиоматично.
https://mtlynch.io/if-got-want-improve-go-tests
Вместо привычного:
username := GetUser()
if username != "dummyUser" {
t.Errorf("unexpected username: got %s, want %s", username, "dummyUser")
}
используйте более элегантный и лаконичный подход:
if got, want := GetUser(), "dummyUser"; got != want {
t.Errorf("username=%s, want=%s", got, want)
}
Преимущества:
- Мгновенный фокус на «что получили» (got) и «что ожидали» (want) — глаза сразу видят суть.
- Отлично подходит для table-driven тестов — компактность и читаемость.
- Упрощённое копирование/вставка проверок — не забудете обновить сообщение об ошибке.
MT Lynch
**Чёткое разделение: if got, want := — это всегда проверка, любые другие if — логика теста.
Универсальная, аккуратная и не требует дополнительных библиотек — просто Go‑идиоматично.
https://mtlynch.io/if-got-want-improve-go-tests
👍15😁9❤5🤬3😢2