ar
Feedback

لا تقع ضحية للمخادعين! تيليمتريو يكتشف ويُميّز هذه القنوات 👉 إذا كنت تريد رؤية العلامة، اشترك 👈

Библиотека Go-разработчика | Golang

Библиотека Go-разработчика | Golang

الذهاب إلى القناة على Telegram

Все самое полезное для Go-разработчика в одном канале. Учиться у нас: clc.to/qaSdww По рекламе: @tproger_sales_bot Для обратной связи: @proglibrary_feeedback_bot РКН: https://gosuslugi.ru/snet/67a4a8c24689c2151c752af0 Заявка: 8137752389

إظهار المزيد

📈 نظرة تحليلية على قناة تيليجرام Библиотека Go-разработчика | Golang

تُعد قناة Библиотека Go-разработчика | Golang (@goproglib) في القطاع اللغوي الروسية لاعباً نشطاً. يضم المجتمع حالياً 24 055 مشتركاً، محتلاً المرتبة 5 414 في فئة التكنولوجيات والتطبيقات والمرتبة 27 102 في منطقة روسيا.

📊 مؤشرات الجمهور والحراك

منذ تأسيسه في невідомо، حقق المشروع نمواً سريعاً وجمع 24 055 مشتركاً.

بحسب آخر البيانات بتاريخ 09 أكتوبر, 2026، تحافظ القناة على نشاط مستقر. خلال آخر 30 يوماً تغيّر عدد الأعضاء بمقدار -21، وفي آخر 24 ساعة بمقدار -3، مع بقاء الوصول العام مرتفعاً.

  • حالة التحقق: غير موثّقة
  • معدل التفاعل (ER): يبلغ متوسط تفاعل الجمهور 16.59‎%. وخلال أول 24 ساعة من النشر يحصد المحتوى عادةً 8.10‎% من ردود الفعل نسبةً إلى إجمالي المشتركين.
  • وصول المنشورات: يحصل كل منشور على متوسط 3 990 مشاهدة. وخلال اليوم الأول يجمع عادةً 1 948 مشاهدة.
  • التفاعلات والاستجابة: يتفاعل الجمهور بانتظام؛ متوسط التفاعلات لكل منشور يبلغ 28.
  • الاهتمامات الموضوعية: يركز المحتوى على مواضيع رئيسية مثل навигация, лучшее_из_библиотеки_2025, git, string, golive.

📝 الوصف وسياسة المحتوى

يصف المؤلف القناة بأنها مساحة للتعبير عن الآراء الذاتية:
“Все самое полезное для Go-разработчика в одном канале. Учиться у нас: clc.to/qaSdww По рекламе: @tproger_sales_bot Для обратной связи: @proglibrary_feeedback_bot РКН: https://gosuslugi.ru/snet/67a4a8c24689c2151c752af0 Заявка: 8137752389”

بفضل وتيرة التحديث المرتفعة (أحدث البيانات بتاريخ 10 أكتوبر, 2026) تحافظ القناة على حداثتها ومستوى وصول مرتفع. وتُظهر التحليلات تفاعلاً نشطاً من الجمهور، ما يجعلها نقطة تأثير مهمة ضمن فئة التكنولوجيات والتطبيقات.

24 055
المشتركون
-324 ساعات
-107 أيام
-2130 أيام
جذب المشتركين
أكتوبر '26
أكتوبر '26
+45
في 2 قنوات
سبتمبر '26
+198
في 0 قنوات
Get PRO
أغسطس '26
+260
في 1 قنوات
Get PRO
يوليو '26
+221
في 2 قنوات
Get PRO
يونيو '26
+171
في 3 قنوات
Get PRO
مايو '26
+288
في 3 قنوات
Get PRO
أبريل '26
+249
في 1 قنوات
Get PRO
مارس '26
+216
في 1 قنوات
Get PRO
فبراير '26
+487
في 7 قنوات
Get PRO
يناير '26
+346
في 3 قنوات
Get PRO
ديسمبر '25
+370
في 4 قنوات
Get PRO
نوفمبر '25
+384
في 4 قنوات
Get PRO
أكتوبر '25
+331
في 2 قنوات
Get PRO
سبتمبر '25
+290
في 0 قنوات
Get PRO
أغسطس '25
+316
في 4 قنوات
Get PRO
يوليو '25
+317
في 2 قنوات
Get PRO
يونيو '25
+315
في 0 قنوات
Get PRO
مايو '25
+391
في 5 قنوات
Get PRO
أبريل '25
+358
في 4 قنوات
Get PRO
مارس '25
+625
في 53 قنوات
Get PRO
فبراير '25
+527
في 35 قنوات
Get PRO
يناير '25
+517
في 37 قنوات
Get PRO
ديسمبر '24
+591
في 40 قنوات
Get PRO
نوفمبر '24
+605
في 52 قنوات
Get PRO
أكتوبر '24
+499
في 36 قنوات
Get PRO
سبتمبر '24
+676
في 36 قنوات
Get PRO
أغسطس '24
+580
في 36 قنوات
Get PRO
يوليو '24
+586
في 37 قنوات
Get PRO
يونيو '24
+467
في 29 قنوات
Get PRO
مايو '24
+674
في 35 قنوات
Get PRO
أبريل '24
+771
في 36 قنوات
Get PRO
مارس '24
+901
في 31 قنوات
Get PRO
فبراير '24
+729
في 31 قنوات
Get PRO
يناير '24
+863
في 27 قنوات
Get PRO
ديسمبر '23
+850
في 29 قنوات
Get PRO
نوفمبر '23
+608
في 10 قنوات
Get PRO
أكتوبر '23
+697
في 25 قنوات
Get PRO
سبتمبر '23
+723
في 0 قنوات
Get PRO
أغسطس '23
+648
في 0 قنوات
Get PRO
يوليو '23
+503
في 0 قنوات
Get PRO
يونيو '23
+422
في 0 قنوات
Get PRO
مايو '23
+568
في 0 قنوات
Get PRO
أبريل '23
+365
في 0 قنوات
Get PRO
مارس '23
+841
في 0 قنوات
Get PRO
فبراير '23
+392
في 0 قنوات
Get PRO
يناير '23
+395
في 0 قنوات
Get PRO
ديسمبر '22
+384
في 0 قنوات
Get PRO
نوفمبر '22
+491
في 0 قنوات
Get PRO
أكتوبر '22
+256
في 0 قنوات
Get PRO
سبتمبر '22
+292
في 0 قنوات
Get PRO
أغسطس '22
+394
في 0 قنوات
Get PRO
يوليو '22
+472
في 0 قنوات
Get PRO
يونيو '22
+443
في 0 قنوات
Get PRO
مايو '22
+176
في 0 قنوات
Get PRO
أبريل '22
+328
في 0 قنوات
Get PRO
مارس '22
+242
في 0 قنوات
Get PRO
فبراير '22
+135
في 0 قنوات
Get PRO
يناير '22
+236
في 0 قنوات
Get PRO
ديسمبر '21
+245
في 0 قنوات
Get PRO
نوفمبر '21
+219
في 0 قنوات
Get PRO
أكتوبر '21
+215
في 0 قنوات
Get PRO
سبتمبر '21
+290
في 0 قنوات
Get PRO
أغسطس '21
+298
في 0 قنوات
Get PRO
يوليو '21
+281
في 0 قنوات
Get PRO
يونيو '21
+196
في 0 قنوات
Get PRO
مايو '21
+389
في 0 قنوات
Get PRO
أبريل '21
+336
في 0 قنوات
Get PRO
مارس '21
+280
في 0 قنوات
Get PRO
فبراير '21
+258
في 0 قنوات
Get PRO
يناير '21
+262
في 0 قنوات
Get PRO
ديسمبر '20
+6 566
في 0 قنوات
التاريخ
نمو المشتركين
الإشارات
القنوات
09 أكتوبر+3
08 أكتوبر+4
07 أكتوبر+2
06 أكتوبر+12
05 أكتوبر+6
04 أكتوبر+6
03 أكتوبر+3
02 أكتوبر+5
01 أكتوبر+4
منشورات القناة
🔎 Go 1.27 находит утечки горутин Обработчик запустил воркеры, получил ошибку и вернулся. Остальные горутины продолжают отпра
🔎 Go 1.27 находит утечки горутин Обработчик запустил воркеры, получил ошибку и вернулся. Остальные горутины продолжают отправлять результаты в небуферизованный канал — только читать его уже некому. В Go 1.27 появился профиль goroutineleak, который помогает находить такие зависания в работающем приложении. Если у сервиса уже подключён net/http/pprof, профиль доступен по адресу:
/debug/pprof/goroutineleak
🔴 Что он видит: — блокировки на каналах; — ожидание Mutex, RWMutex, WaitGroup и Cond; — некоторые взаимные блокировки, которые обычный профиль горутин не отличает от нормального ожидания. Ожидание сетевого или файлового I/O этим механизмом не проверяется. Пустой профиль ещё не доказывает, что утечек нет. ➡️ Примеры ошибок и устройство профилировщика 📍 Навигация: Вакансии • Задачи • Собесы 🐸 Библиотека Go-разработчика

2
Гоферы, дайте отдохнуть себе и коду — приходите на Go Weekend 17 октября Конференция Lamoda Tech для тех, кто пишет на Go и м
Гоферы, дайте отдохнуть себе и коду — приходите на Go Weekend 17 октября Конференция Lamoda Tech для тех, кто пишет на Go и может говорить о нем часами. Вас ждут два трека, 6 часов и 80+ амбассадоров Go-комьюнити. Примите участие в дискуссии о будущем языка и применении AI, задайте неудобные вопросы и потравите кодерские байки за пиццей. Трек Tech: доклады про архитектурные решения, спорные идеи и реальные кейсы. 🎙 Дмитрий Буров, Senior Golang-разработчик, Lamoda Tech «Тернарный оператор в Go. Принять нельзя отклонить» 🎙 Станислав Королев, Senior Golang-разработчик, Авито «Почему spec-driven development плохо работает на микросервисах» 🎙 Эдгар Сипки, Founder, EasyP && Sipki tech «MCP on Go, или Как случайно сломать безопасность вашей системы?» Трек Activities: круглый стол о будущем Go, «13 злых вопросов» экспертам и игры с призами. 🗓 17 октября ⏰ 12:00–18:00 📍 Москва, ул. Крылатская, 15   ➡️ Все подробности и регистрация на сайте Реклама. ООО "ЛАМОДА ТЕХ". ИНН 7734461512. erid: 2W5zFGPv2g1
2 323
3
Поделитесь своим подходом к работе с нейросетями:
2 991
4
Перенос MiniJinja с Rust на Go силами Opus и Codex Около десяти часов работы агента и примерно 45 минут активного участия авт
Перенос MiniJinja с Rust на Go силами Opus и Codex Около десяти часов работы агента и примерно 45 минут активного участия автора. Так Армин Ронахер оценивает основной перенос MiniJinja с Rust на Go. MiniJinja собирает текст по шаблонам. Он начал с Opus 4.5 внутри Pi, а оставшиеся исправления тестов передал GPT-5.2 Codex. Рабочая среда оставалась той же; Go-реализацию сверяли с сохранёнными результатами тестов Rust-версии. По ходу работы агент отказался от проверок, в которых программа должна завершаться ошибкой: текст сообщений не совпадал дословно. Ронахер вмешался и сохранил эти тесты, изменив способ сравнения сообщений. 📍 Навигация: Вакансии • Задачи • Собесы 🐸 Библиотека Go-разработчика
2 252
5
🎓 Тестовый собес с Go Senior из Гамбурга, с опытом работы в Yandex и Uzum [ + эталонные ответы на 50 сложных вопросов в пода
🎓 Тестовый собес с Go Senior из Гамбурга, с опытом работы в Yandex и Uzum [ + эталонные ответы на 50 сложных вопросов в подарок ] В четверг, 8 октября, в 19:00 МСК приходи онлайн на тестовое собеседование. Можно посмотреть, как всё устроено изнутри, и понять, насколько ты готов к такому интервью. Интервьюер: Маруф Караев — Senior Software Engineer из Гамбурга, ex-Yandex, ex-Uzum. Как это будет: 📂 Маруф задаст разработчику-добровольцу те вопросы и задачи, которые даёт кандидатам на своих интервью. Заранее их никто не знает; 📂 После каждого ответа Маруф даст обратную связь: что прозвучало сильно, а что стоило раскрыть иначе. Так станет понятнее, на что обращают внимание на собесе; 📂 В конце сможешь задать Маруфу любой вопрос и получить развёрнутый ответ; Эфир проходит в рамках менторской программы ШОРТКАТ для Go-разработчиков, которые хотят сменить работу и вырасти в грейде и зарплате. 🎁 Подарок для всех, кто зарегается на веб: файл с эталонными ответами на 50 сложных вопросов с Go-интервью 🔥 Жми на кнопку, чтобы попасть на эфир и забрать подарок ↓ @shortcut_go_bot Реклама. О рекламодателе.
2 753
6
🧑‍💻 Эмулятор AWS-сервисов Kumo — это небольшой инструмент на Go для локальной имитации AWS-сервисов. Он помогает разработчи
🧑‍💻 Эмулятор AWS-сервисов Kumo — это небольшой инструмент на Go для локальной имитации AWS-сервисов. Он помогает разработчикам тестировать приложения без облака. Проект подходит для unit-тестов, где нужен мок для облачных вызовов. Устанавливается через go install github.com/sivchari/kumo@latest. Запускается как прокси, а SDK настраивается на локальный эндпоинт. Поддерживает базовые операции над S3: создание бакетов, загрузку объектов, список файлов. Для DynamoDB эмулирует таблицы, put/get item. Конфиг через флаги или env. ➡️ Репозиторий 📍 Навигация: Вакансии • Задачи • Собесы 🐸 Библиотека Go-разработчика #GoLive
4 033
7
👨‍💻 Библиотека для написания LSP-серверов Написать свой Language Server с нуля на Go сложно. Нужно разобраться с JSON-RPC фреймингом, маршрутизацией сообщений, типами LSP, управлением жизненным циклом соединения. И всё это до того, как начнёшь писать саму языковую логику. go-lsp берёт всё это на себя. Библиотека реализует LSP 3.17 и даёт чистый интерфейс, где вы просто описываете, что ваш сервер умеет делать. go-lsp состоит из трёх пакетов. jsonrpc отвечает за JSON-RPC 2.0 поверх io.ReadWriteCloser. lsp содержит Go-типы для всех структур протокола, без логики. server связывает всё вместе: принимает хендлер, смотрит какие интерфейсы он реализует и автоматически регистрирует соответствующие LSP-методы. Устанавливаем: go get github.com/owenrumney/go-lsp Минимальный сервер с поддержкой hover: package main import ( "context" "os" "github.com/owenrumney/go-lsp/lsp" "github.com/owenrumney/go-lsp/server" ) type Handler struct{} func (h *Handler) Initialize(ctx context.Context, params *lsp.InitializeParams) (*lsp.InitializeResult, error) { return &lsp.InitializeResult{ Capabilities: lsp.ServerCapabilities{ HoverProvider: &lsp.HoverOptions{}, }, }, nil } func (h *Handler) Shutdown(ctx context.Context) error { return nil } func (h *Handler) Hover(ctx context.Context, params *lsp.HoverParams) (*lsp.Hover, error) { return &lsp.Hover{ Contents: lsp.MarkupContent{ Kind: lsp.MarkupKindMarkdown, Value: "Hello from the server", }, }, nil } func main() { srv := server.NewServer(&Handler{}) if err := srv.Run(context.Background(), server.RunStdio()); err != nil { os.Exit(1) } } Сервер сам понимает, что хендлер поддерживает hover, потому что он реализует интерфейс HoverHandler. Вручную регистрировать методы не нужно. Хотите добавить completion — реализуйте CompletionHandler. Обязательный интерфейс только один — LifecycleHandler с методами Initialize и Shutdown. Всё остальное реализуете по мере необходимости. ➡️ Репозиторий 📍 Навигация: Вакансии • Задачи • Собесы 🐸 Библиотека Go-разработчика
3 672
8
🤔 Вопрос с собеседования по Go Что выведет программа? ❤️ — 1 true / 0 false 🔥 — 1 true / 1 false 👍 — 1 false / 0 true 👾 —
🤔 Вопрос с собеседования по Go Что выведет программа? ❤️ — 1 true / 0 false 🔥 — 1 true / 1 false 👍 — 1 false / 0 true 👾 — panic при втором чтении 👇 Правильный ответ (нажми, чтобы прочитать): ❤️ — 1 true / 0 false После close(ch) уже записанное значение можно получить обычным чтением. Когда канал пуст и закрыт, чтение возвращает нулевое значение типа и ok == false. ⚠️ Закрытый канал не становится сразу «пустым» — его буфер всё ещё можно прочитать. 📍 Навигация: Вакансии • Задачи • Собесы 🐸 Библиотека Go-разработчика
3 357
9
👩‍💻 Что на самом деле происходит внутри Go map? После Go 1.24 обычный map внутри работает уже не так, как раньше: вместо ст
👩‍💻 Что на самом деле происходит внутри Go map? После Go 1.24 обычный map внутри работает уже не так, как раньше: вместо старой схемы с overflow buckets используется Swiss Tables. И там довольно много интересного: хеш делится на части, поиск идёт группами по 8 слотов, SIMD сразу сравнивает несколько значений, а при росте таблица может дробиться. 📍 В статье всё это разбирают буквально по шагам — от m["cow"] = 4 до устройства directory и таблиц. Если хочется понять, почему Go map работает быстро, а не просто знать, что он O(1) — почитать стоит. 🐸 Библиотека программиста
3 270
10
🔥 В Go 1.27 появился portable SIMD До этого SIMD-оптимизации в Go требовали архитектурного кода — например, отдельно для amd64 и arm64. ➡️ Теперь экспериментальный пакет simd предлагает единый интерфейс для разных CPU: AVX/AVX2/AVX512, NEON и Wasm SIMD. Размер вектора при этом не зашит в типы, а при отсутствии аппаратной поддержки операции могут выполняться через эмуляцию. Пока API экспериментальный, но идея простая: один векторизованный код вместо отдельных реализаций под каждую архитектуру. 🔗 Подробнее о том, как это реализовано внутри Go 📍 Навигация: Вакансии • Задачи • Собесы 🐸 Библиотека Go-разработчика #GoLive
4 066
11
🤡🤡 📍 Навигация: Вакансии • Задачи • Собесы 🐸 Библиотека Go-разработчика #GoGiggle
🤡🤡 📍 Навигация: Вакансии • Задачи • Собесы 🐸 Библиотека Go-разработчика #GoGiggle
4 266
12
💡 Код работает. А data race уже есть В Go можно записать значение в одной горутине, прочитать в другой — и получить именно т
💡 Код работает. А data race уже есть В Go можно записать значение в одной горутине, прочитать в другой — и получить именно тот результат, который ожидал. Проблема в том, что Go этого не гарантирует без синхронизации. Например, даже такой паттерн: msg = "hello" done = true for !done {} fmt.Println(msg) может выглядеть абсолютно логично, но содержит две data race. 🔜 В разборе наглядно показывают, почему так происходит: от работы компилятора и CPU до memory model Go. А затем — чем правильно заменить самодельный флаг: atomic → Mutex → WaitGroup → channels → sync.Once Отдельно разбирается интересный эксперимент, где две горутины иногда обе читают 0, хотя на первый взгляд это кажется невозможным. Если с конкурентностью в Go приходится работать не только на уровне «поставь mutex», этот разбор стоит посмотреть. 📍 Навигация: Вакансии • Задачи • Собесы 🐸 Библиотека Go-разработчика
3 968
13
💥 TCP/IP: что происходит с данными в сети Когда Go-приложение отправляет данные по сети, они проходят несколько уровней TCP/
💥 TCP/IP: что происходит с данными в сети Когда Go-приложение отправляет данные по сети, они проходят несколько уровней TCP/IP. Каждый отвечает за свою часть доставки. 1️⃣ Канальный Отвечает за передачу данных внутри конкретной сети: Ethernet, Wi-Fi и т. д. Здесь работают MAC-адреса и механизмы доступа к среде. 2️⃣ Межсетевой Здесь появляется IP — адресация и маршрутизация пакетов между сетями. Маршрутизаторы определяют, куда отправить пакет дальше. 3️⃣ Транспортный Определяет, как данные доставляются между хостами. Основные протоколы: TCP — соединение, порядок данных, подтверждения и повторная передача; UDP — минимальные накладные расходы, без гарантии доставки и порядка. 4️⃣ Прикладной Протоколы, с которыми непосредственно работают приложения: HTTP, DNS, SMTP, SSH и другие. TCP vs UDP У TCP заголовок сложнее: в нём есть sequence number, acknowledgement, window и другие поля, необходимые для управления передачей. У UDP всё проще: порты, длина, checksum и данные. В Go разницу особенно хорошо видно при работе с net.TCPConn и net.UDPConn. 📍 Навигация: Вакансии • Задачи • Собесы 🐸 Библиотека Go-разработчика
3 877
14
🔴 Встроенные функции len, make, panic — встроенные функции Go, которые можно использовать без импорта пакетов. ❓ Но почему тогда len указана в документации builtin как: func len(v Type) int builtin — специальный пакет только для документации. Он не компилируется, а Type — условная заглушка для типа аргумента. При этом built-in — не обычные функции. У них нет стандартных Go-типов: компилятор обрабатывает их вызовы особым образом. 🟡 Например, len(s) для среза может быть преобразован компилятором в получение длины из внутреннего представления среза. Для make, panic и других built-in механизм уже другой. Поэтому никаких дженериков вроде len[T any](s []T) в исходном коде нет — built-in являются специальными конструкциями языка, а builtin лишь описывает их для документации. 📍 Навигация: Вакансии • Задачи • Собесы 🐸 Библиотека Go-разработчика
3 830
15
+3
🤩 Go с нуля: серия базовых шпаргалок Собрали путь от Hello, World! до goroutines, channels и context. День 1 — синтаксис, модули и инструменты День 2 — типы, функции, слайсы, map и ошибки День 3 — интерфейсы, структуры, методы, указатели и композиция День 4 — goroutines, channels, select, WaitGroup, Mutex и context Некоторые формулировки в карточках упрощены для новичков: порядок map не гарантирован, поведение slice зависит от backing array, а WaitGroup и Mutex решают разные задачи. 📍 Навигация: Вакансии • Задачи • Собесы 🐸 Библиотека Go-разработчика
4 730
16
🤔 Вопрос с собеседования по Go Что выведет программа? ❤️ — [1 2 3 4 5] / [1 2 10] 🔥 — [1 2 10 4 5] / [1 2 10] 👍 — [1 2 3 4
🤔 Вопрос с собеседования по Go Что выведет программа? ❤️ — [1 2 3 4 5] / [1 2 10] 🔥 — [1 2 10 4 5] / [1 2 10] 👍 — [1 2 3 4 5] / [1 2 3] 👇 Правильный ответ (нажми, чтобы прочитать): 🔥 — [1 2 10 4 5] / [1 2 10] b := a[:2] создаёт слайс, который использует тот же backing array, что и a. У b остаётся capacity до конца исходного массива, поэтому append не выделяет новый массив, а записывает 10 в третий элемент. В итоге изменяется и a: [1 2 10 4 5] [1 2 10] 📍 Навигация: Вакансии • Задачи • Собесы 🐸 Библиотека Go-разработчика
4 327
17
🛠 Rune — open-source IDE и terminal multiplexer на Go Rune объединяет IDE, терминал и AI-agent в одном приложении. Что интер
🛠 Rune — open-source IDE и terminal multiplexer на Go Rune объединяет IDE, терминал и AI-agent в одном приложении. Что интересного: • GPU-ускоренный интерфейс; • native graphics: OpenGL на Linux и Metal на macOS; • language intelligence из коробки; • встроенный agent; • терминалы, вкладки и окна в едином workspace; • E2E-зашифрованная сеть между экземплярами Rune. Без Electron — приложение использует нативный графический pipeline. Установить: curl -fsSL https://rune.build/install.sh | sh 🔗 GitHub 📍 Навигация: Вакансии • Задачи • Собесы 🐸 Библиотека Go-разработчика #GoToProduction
3 998
18
🤩 SQLite вместо отдельного брокера в Go Watermill поддерживает SQLite Pub/Sub — сообщения передаются между publisher и subscriber через таблицы SQLite. Что это даёт: — не нужен Kafka, RabbitMQ или Redis; — сообщения хранятся в SQLite-файле; — данные переживают перезапуск приложения; — удобно для небольших сервисов и локальной разработки. 🔴 Публикация: publisher, err := wmsqlitemodernc.NewPublisher( db, wmsqlitemodernc.PublisherOptions{ InitializeSchema: true, Logger: logger, }, ) msg := message.NewMessage( watermill.NewUUID(), []byte(`{"message":"Hello, world!"}`), ) err = publisher.Publish("messages", msg) Подключается как обычный Pub/Sub Watermill — при этом отдельный брокер не требуется. ⚠️ SQLite Pub/Sub всё ещё Beta: реализация стабильна, но недостаточно проверена в production. Для высоких нагрузок учитывайте ограничения SQLite. 📍 Навигация: Вакансии • Задачи • Собесы 🐸 Библиотека Go-разработчика
4 475
19
⚡️ Go 1.27 ускоряет небольшие аллокации В Go 1.27 появился size-specialized memory allocation — специальные пути выделения памяти для небольших объектов. Что изменилось: — аллокации объектов размером менее 80 байт могут стать быстрее на 20–30%; — в программах с большим количеством аллокаций общий прирост может достигать 1%; — максимальный эффект ожидается для объектов на 16 и 24 байта. 🔴 Почему это работает? Раньше runtime использовал общий путь mallocgc, которому нужно определить размер объекта, класс аллокации и дополнительные параметры. 🔴 Теперь для часто встречающихся размеров есть специализированные функции. Они заранее знают размер объекта и могут: — быстрее очищать память; — не вычислять класс аллокации повторно; — эффективнее выполнять служебные операции; — использовать более короткий fast path. Особенно часто такие размеры встречаются у структур, интерфейсов, строк и слайсов. 🔗 Ничего менять в коде не нужно. Чтобы получить улучшения, достаточно пересобрать приложение с Go 1.27. При необходимости эксперимент можно отключить: ```bash GOEXPERIMENT=nosizespecializedmalloc 📍 Навигация: Вакансии • Задачи • Собесы 🐸 Библиотека Go-разработчика #GoLive
4 191
20
🛠 Напишите конфиг сами viper — самая частая рекомендация для конфигурации в Go. Он умеет читать файлы, переменные окружения, удалённые источники и устанавливать дефолты. Звучит удобно, но на практике создаёт проблемы. 🔴 В чём проблема Viper тянет большое дерево зависимостей. Методы GetString, GetInt и подобные не типизированы — значения возвращаются в рантайме без проверки на этапе компиляции. Ключи конфига разбросаны по коду как строковые литералы. При нетривиальном использовании поведение при слиянии и приоритетах конфигов требует чтения исходников. 🔴 Что использовать Структура с тегами и yaml.NewDecoder: type Config struct { DatabaseURL string `yaml:"database_url"` Kafka KafkaConfig `yaml:"kafka"` Server ServerConfig `yaml:"server"` } func Load(path string) (*Config, error) { f, err := os.Open(path) if err != nil { return nil, err } defer f.Close() var cfg Config if err := yaml.NewDecoder(f).Decode(&cfg); err != nil { return nil, err } return &cfg, nil } Переменные окружения добавляются вручную через os.Getenv там, где это нужно. 🔴 Что получаем Полностью типизированный конфиг. Никаких строковых ключей. Граф зависимостей, который можно проверить за секунды. Код, который вы полностью контролируете. Для JSON-конфига подход тот же, только с encoding/json. Пакет gopkg.in/yaml.v3 — единственная внешняя зависимость, и та минимальная. 📍 Навигация: Вакансии • Задачи • Собесы 🐸 Библиотека Go-разработчика #GoToProduction
3 964