⚡ Интересный факт про работу 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🔥3
Топ 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🥰1
Автор: Tim Boring
Год издания: 2024
Язык: Английский
Описание:
Системы оркестрации, такие как Kubernetes, могут показаться "черным ящиком": вы размещаете их в облаке, и оно волшебным образом обрабатывает все, что вам нужно. Это может показаться идеальным решением, пока что—то не пойдет не так, и вы не будете знать, как найти и устранить свои проблемы. Создание оркестратора на Go (с нуля) раскрывает внутреннюю работу фреймворков оркестровки, помогая вам создавать свой собственный.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍17🔥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-а, и тестирование в кластере.👉 Читать
👍5❤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
👍28😁15❤8🤬5😢2🔥1
Что нового в Go 1.25?
🚀 Практичное обновление, без громких изменений синтаксиса
Go 1.25 — это не о новом синтаксисе, а о качестве разработки: исправлены давние недочёты, улучшена безопасность работы рантайма и добавлены более умные инструменты.
🛠 Улучшения в инструментах и экосистеме
Команда Go внесла правки в компилятор, рантайм, линкер, стандартную библиотеку и вспомогательные инструменты — всё это для более стабильной и гладкой работы.
🆕 Добавлен новый пакет
Go 1.25 включает один новый пакет. Это небольшое, но значимое расширение возможностей стандартной библиотеки.
Источник: https://www.freecodecamp.org/news/what-is-new-in-go/
🚀 Практичное обновление, без громких изменений синтаксиса
Go 1.25 — это не о новом синтаксисе, а о качестве разработки: исправлены давние недочёты, улучшена безопасность работы рантайма и добавлены более умные инструменты.
🛠 Улучшения в инструментах и экосистеме
Команда Go внесла правки в компилятор, рантайм, линкер, стандартную библиотеку и вспомогательные инструменты — всё это для более стабильной и гладкой работы.
🆕 Добавлен новый пакет
Go 1.25 включает один новый пакет. Это небольшое, но значимое расширение возможностей стандартной библиотеки.
Источник: https://www.freecodecamp.org/news/what-is-new-in-go/
👍4❤3🥰1
Описание:
Эта книга написана опытным разработчиком и экспертом по машинному обучению и содержит практические рекомендации, основанные на реальном опыте. Прочитав эту книгу, вы получите знания и инструменты для создания надежных и производительных моделей без ущерба для ясности и удобства обслуживания.
Книга
#eng #Go
Please open Telegram to view this post
VIEW IN TELEGRAM
❤8👍6🔥1
Также представлена новая команда
genkit init:ai-tools
для лёгкой интеграции с AI-ассистентами в процессе разработки. 🔑 Что нового в Genkit Go 1.0
1. Production-ready
API признан стабильным: все программы, написанные на Genkit 1.*, будут работать и собираться в будущих минорных версиях.
2. Type-safe AI-flows
- Определение “flows” через Go-структуры и JSON Schema.
- Повышенная типобезопасность, тестируемость, наблюдаемость и удобство при деплое.
3. Унифицированный интерфейс моделей
Поддержка разных провайдеров (Google AI, Vertex AI, OpenAI, Ollama и др.) через единый API — легко переключаться между ними.
4. Tool calling, RAG и мультимодальность
- Вызов внешних инструментов (tool calling).
- Retrieval-augmented generation (RAG).
- Поддержка мультимодальных сценариев (текст, изображения и др.).
5. Инструменты для разработчиков
- Независимая CLI-утилита для локальной разработки.
- Developer UI: тестирование промтов, отладка flows, отслеживание производительности и трассировка.
6. Команда `genkit init:ai-tools`
Автоматическая интеграция с AI-ассистентами разработки: Gemini CLI, Firebase Studio, Claude Code, Cursor и др.
7. Примеры кода
В официальной документации показано, как определять flows, запускать HTTP endpoints, работать с моделями и инструментами.
🚀 Почему это важно
- Быстрая и безопасная разработка AI-приложений на Go.
- Унифицированный API позволяет экспериментировать и менять провайдеров без переписывания логики.
- Встроенные dev-инструменты ускоряют отладку и интеграцию.
- Подходит как для прототипов, так и для production-решений.
📌 Официальный анонс: https://developers.googleblog.com/en/announcing-genkit-go-10-and-enhanced-ai-assisted-development/?linkId=16710004Нужно
@Golang_google
#Genkit #GoLang #GoogleAI #AIDevelopment #OpenSource #RAG
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12❤7🤔4🥰2🔥1😁1
Введение
Автор вдохновился виртуальными машинами вроде WebAssembly и Ethereum VM и решил сам собрать упрощённую VM на языке Go.
Цель — интерпретация байткода, базовые арифметические операции и максимально простой дизайн.
Архитектура: стек-машина vs регистровая
- Стек-машина (stack machine) — работает по принципу LIFO, инструкции манипулируют вершиной стека. Простая и удобная для отладки.
- Регистровая машина (register machine) — оперирует регистрами как CPU, быстрее, но сложнее в реализации.
- Выбор автора — стек-машина из-за простоты и прозрачности.
Как работает
1. Пишем инструкции:
PUSH8 0x48656C...
, STORE8
, RETURN
. 2. Компилируем их в байткод: последовательность байтов (opcode + аргументы).
3. VM исполняет код: читает opcode, обновляет стек, память,
pc
. 4.
RETURN
возвращает участок памяти, например строку “Hello World!”.Почему это интересно
- Даёт понимание, как устроены WebAssembly, JVM и другие среды выполнения.
- Отличный учебный проект: видно взаимодействие стека, памяти и инструкций.
- Можно экспериментировать: расширять набор команд, вводить обработку ошибок, делать оптимизации.
💡 Возможные улучшения
- Добавить работу с разными типами (int, float).
- Ввести условные переходы, циклы, функции.
- Сделать оптимизации: объединение инструкций, уменьшение накладных расходов.
- Обеспечить безопасность: проверка переполнения стека, деление на ноль.
- Добавить отладку: трассировка, дамп памяти и стека.
Источник: https://blog.phakorn.com/posts/2025/building-a-simple-vm/
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13❤4🥰1
📊 Высокопроизводительная библиотека логирования для Go 🚀
mtlog — это библиотека структурированного логирования для Go, вдохновленная Serilog. Она обеспечивает нулевые аллокации для простых операций логирования и поддерживает мощные функции для сложных сценариев, включая шаблоны сообщений и совместимость с OpenTelemetry.
🚀Основные моменты:
- Нулевые аллокации для простых сообщений
- Поддержка шаблонов сообщений и Go синтаксиса
- Интеграция с Kubernetes и OpenTelemetry
- Многофреймворковая поддержка для HTTP
- Расширенные стратегии выборки и маршрутизации логов
📌 GitHub: https://github.com/willibrandon/mtlog
#go
mtlog — это библиотека структурированного логирования для Go, вдохновленная Serilog. Она обеспечивает нулевые аллокации для простых операций логирования и поддерживает мощные функции для сложных сценариев, включая шаблоны сообщений и совместимость с OpenTelemetry.
🚀Основные моменты:
- Нулевые аллокации для простых сообщений
- Поддержка шаблонов сообщений и Go синтаксиса
- Интеграция с Kubernetes и OpenTelemetry
- Многофреймворковая поддержка для HTTP
- Расширенные стратегии выборки и маршрутизации логов
📌 GitHub: https://github.com/willibrandon/mtlog
#go
GitHub
GitHub - willibrandon/mtlog: Serilog-inspired structured logging for Go with message templates, rich formatting, and native Seq…
Serilog-inspired structured logging for Go with message templates, rich formatting, and native Seq support - willibrandon/mtlog
❤7👍6🔥2
Это третья часть серии о том, как шаг за шагом перейти от Bash к Go. В этом выпуске автор показывает, как с помощью Go можно строить платформы — то есть системы, которые упрощают работу команд и скрывают внутреннюю сложность инфраструктуры.
Что реализовано:
• Easypod API Server — простой API-сервер поверх Kubernetes.
• Поддерживаются три базовые операции:
- POST /pod — создать Pod
- GET /pods — получить список Pod’ов
- DELETE /pod/{name} — удалить Pod
• Подключение к Kubernetes через официальный Go SDK (client-go).
• Показаны примеры кода: структуры, обработчики запросов, JSON-декодинг, взаимодействие с API-сервером кластера.
Зачем это нужно:
• Bash-скрипты хороши для простых задач, но плохо масштабируются. Go даёт типизацию, читаемость и безопасность.
• Платформа на Go позволяет абстрагировать сложные операции (например, работу с Kubernetes) и предоставить командам удобный API.
• Такой подход можно развивать: добавлять новые маршруты, интеграции и строить полноценные инструменты для DevOps и платформенной инженерии.
Что можно улучшить:
• Добавить авторизацию и аутентификацию, чтобы ограничить доступ к API.
• Реализовать логирование, метрики и мониторинг.
• Улучшить обработку ошибок и подумать о масштабировании.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5👍5🔥2
Офер в VK для бэкендеров и ML-щиков — станьте частью команды за выходные.
4–5 октября пройдёт VK Weekend Offer. Всего за 2 дня вы сможете пройти весь путь от знакомства с командами до приглашения на работу: пройти техническое собеседование, встретиться с лидами и получить офер.
Требования для бекэндеров – три года опыта коммерческой разработки, знание Java, Go, Python, C++.
Для ML-щиков – те же три года опыта + знания Classic ML, RecSys, NLP/LLM, CV, Speech.
Читайте подробности на сайте и подавайте заявку до 2 октября!
4–5 октября пройдёт VK Weekend Offer. Всего за 2 дня вы сможете пройти весь путь от знакомства с командами до приглашения на работу: пройти техническое собеседование, встретиться с лидами и получить офер.
Требования для бекэндеров – три года опыта коммерческой разработки, знание Java, Go, Python, C++.
Для ML-щиков – те же три года опыта + знания Classic ML, RecSys, NLP/LLM, CV, Speech.
Читайте подробности на сайте и подавайте заявку до 2 октября!
❤1🤔1😢1
Forwarded from Golang
📊 Высокопроизводительная библиотека логирования для Go 🚀
mtlog — это библиотека структурированного логирования для Go, вдохновленная Serilog. Она обеспечивает нулевые аллокации для простых операций логирования и поддерживает мощные функции для сложных сценариев, включая шаблоны сообщений и совместимость с OpenTelemetry.
🚀Основные моменты:
- Нулевые аллокации для простых сообщений
- Поддержка шаблонов сообщений и Go синтаксиса
- Интеграция с Kubernetes и OpenTelemetry
- Многофреймворковая поддержка для HTTP
- Расширенные стратегии выборки и маршрутизации логов
📌 GitHub: https://github.com/willibrandon/mtlog
@golang_google
#golang
mtlog — это библиотека структурированного логирования для Go, вдохновленная Serilog. Она обеспечивает нулевые аллокации для простых операций логирования и поддерживает мощные функции для сложных сценариев, включая шаблоны сообщений и совместимость с OpenTelemetry.
🚀Основные моменты:
- Нулевые аллокации для простых сообщений
- Поддержка шаблонов сообщений и Go синтаксиса
- Интеграция с Kubernetes и OpenTelemetry
- Многофреймворковая поддержка для HTTP
- Расширенные стратегии выборки и маршрутизации логов
📌 GitHub: https://github.com/willibrandon/mtlog
@golang_google
#golang
👍4❤2🔥2
📈 Ещё месяц назад вы могли не знать о Go ничего. Сегодня — читаете этот канал. Следующий уровень — начать применять знания на практике.
Чтобы ускорить процесс, попробуйте структурированный подход: обновлённый курс 2025 года «Go-разработчик с нуля» от Нетологии.
На нём вы:
- Выстроите прочную базу по Golang: от написания первых строк кода до работы с модулями, файлами и ошибками.
- Изучите основы DevOps, поймёте, как работать с данными, создавать веб-приложения и REST API.
- Попрактикуетесь на реальных задачах и добавите в портфолио 5 масштабных проекта.
- Пройдёте тестовые собеседования и получите возможность стажировки у партнёров курса.
А потом сможете читать этот канал с ещё большим интересом и понимать каждое обсуждение.
Начать учиться со скидкой 40%.
А если купите курс в сентябре, получите ещё 5 в подарок — по ИИ, психологии и коммуникациям
Реклама. ООО "Нетология". ИНН 7726464125 Erid 2VSb5wmoZDT
Чтобы ускорить процесс, попробуйте структурированный подход: обновлённый курс 2025 года «Go-разработчик с нуля» от Нетологии.
На нём вы:
- Выстроите прочную базу по Golang: от написания первых строк кода до работы с модулями, файлами и ошибками.
- Изучите основы DevOps, поймёте, как работать с данными, создавать веб-приложения и REST API.
- Попрактикуетесь на реальных задачах и добавите в портфолио 5 масштабных проекта.
- Пройдёте тестовые собеседования и получите возможность стажировки у партнёров курса.
А потом сможете читать этот канал с ещё большим интересом и понимать каждое обсуждение.
Начать учиться со скидкой 40%.
А если купите курс в сентябре, получите ещё 5 в подарок — по ИИ, психологии и коммуникациям
Реклама. ООО "Нетология". ИНН 7726464125 Erid 2VSb5wmoZDT
😢2❤1😁1