12 лучших ресурсов по Go. Забирайте ссылки:
👉 @GolangPortal
1. Go Concurrency Rocks: https://concurrency.rocks
2. Go Cookbook: https://go-cookbook.com
3. 100 ошибок в Go и как их избежать: https://100go.co
4. Практические уроки Go: https://practical-go-lessons.com
5. Распространённые паттерны производительности: https://goperf.dev/01-common-patterns/
6. Практические сетевые паттерны: https://goperf.dev/02-networking/
7. Изучение Go с помощью тестов: https://quii.gitbook.io/learn-go-with-tests
8. Гайд по профилированию, трейсингу и наблюдаемости в Go: https://github.com/DataDog/go-profiler-notes/blob/main/guide/README.md
9. Go Class: https://youtube.com/playlist?list=PLoILbKo9rG3skRCj37Kn5Zj803hhiuRK6
10. Дорожная карта по Go: https://roadmap.sh/golang
11. Серия «Go в VictoriaMetrics»: https://victoriametrics.com/blog/categories/go-@-victoriametrics/
12. Практические советы по Go: https://github.com/func25/go-practical-tips/blob/main/tips.md
Please open Telegram to view this post
VIEW IN TELEGRAM
👍17🔥6❤5
Кэш на Go, CAS-безопасный, с одиночными элементами, валидируемыми при чтении, валидацией пакетного Set, подключаемыми провайдерами/кодеками и опциональными общими поколениями
https://github.com/unkn0wn-root/cascache
👉 @GolangPortal
https://github.com/unkn0wn-root/cascache
Please open Telegram to view this post
VIEW IN TELEGRAM
❤7
Основные команды Docker-контейнера (шпаргалка)
Запуск контейнеров, подключение к ним и выполнение команд внутри контейнеров — это ключевые операции по управлению контейнерами
Максимально наглядное объяснение их на одной диаграмме
👉 @GolangPortal
Запуск контейнеров, подключение к ним и выполнение команд внутри контейнеров — это ключевые операции по управлению контейнерами
Максимально наглядное объяснение их на одной диаграмме
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4👍4
Вертикальное масштабирование пода без перезапуска стало возможным начиная с Kubernetes v1.33.
Обычно, если вы хотели выдать приложению (Pod в Kubernetes) больше памяти или CPU, его приходилось перезапускать.
Это ок, если приложение спокойно относится к перезапускам, но есть такие, которым остановки/старты противопоказаны: базы данных, тяжёлые batch-задачи или штуки, которым нужна ровная непрерывная работа.
Бета
Новая фича «in-place Pod resize» позволяет менять объём памяти и CPU у Pod, пока он продолжает работать. Начиная с версии 1.33 она считается достаточно зрелой для обычного использования и включена по умолчанию. До этого нужно было включать фича-гейт InPlacePodVerticalScaling.
Как
Вместо обычного
Это похоже на то, как устроены другие возможности Kubernetes. Например:
🔹
🔹
Аналогично,
Важно: это применяется к отдельным Pod. Если запустить
Увеличивать CPU просто, увеличение памяти обычно проходит, если на узле есть свободная ёмкость. Уменьшать CPU тоже легко, а вот уменьшение памяти — самый сложный кейс и может провалиться, быть отложено или потребовать перезапуск в зависимости от политики. Чтобы понимать, как идёт процесс, следите за полями
Политика ресайза
Каждый контейнер в спецификации Pod может задать
🔹 NotRequired: Kubernetes попытается изменить значения ресурсов на месте, пока контейнер работает. Это значение по умолчанию. Это best-effort: если рантайм не может безопасно применить изменение (особенно при уменьшении памяти), операция завершится ошибкой вместо принудительного перезапуска.
🔹 RestartContainer: чтобы применить новые настройки ресурсов, Kubernetes обязан перезапустить контейнер. Полезно для приложений, которые читают лимиты ресурсов только при старте, например некоторые JVM-нагрузки.
Пример:
Источник
👉 @GolangPortal
Обычно, если вы хотели выдать приложению (Pod в Kubernetes) больше памяти или CPU, его приходилось перезапускать.
Это ок, если приложение спокойно относится к перезапускам, но есть такие, которым остановки/старты противопоказаны: базы данных, тяжёлые batch-задачи или штуки, которым нужна ровная непрерывная работа.
Бета
Новая фича «in-place Pod resize» позволяет менять объём памяти и CPU у Pod, пока он продолжает работать. Начиная с версии 1.33 она считается достаточно зрелой для обычного использования и включена по умолчанию. До этого нужно было включать фича-гейт InPlacePodVerticalScaling.
Как
Вместо обычного
kubectl edit по Pod используется специальный подресурс /resize. Например, можно сделать patch так:kubectl patch pod mypod --subresource=resize ....
Это похоже на то, как устроены другие возможности Kubernetes. Например:
/status — подресурс, которым можно обновлять только поле status объекта, не трогая его spec./scale — подресурс у Deployment или StatefulSet, позволяющий менять количество реплик без редактирования всего манифеста.Аналогично,
/resize — подресурс у Pod, который позволяет менять ресурсы на месте.Важно: это применяется к отдельным Pod. Если запустить
kubectl set resources на Deployment, StatefulSet или Job, это всё равно поменяет шаблон и породит новые Pod, а не сделает in-place изменение.Увеличивать CPU просто, увеличение памяти обычно проходит, если на узле есть свободная ёмкость. Уменьшать CPU тоже легко, а вот уменьшение памяти — самый сложный кейс и может провалиться, быть отложено или потребовать перезапуск в зависимости от политики. Чтобы понимать, как идёт процесс, следите за полями
status и conditions у Pod.Политика ресайза
Каждый контейнер в спецификации Pod может задать
resizePolicy. Внутри этого поля CPU и память перечисляются отдельно, и для каждого выбирается политика перезапуска. Доступны два значения:Пример:
resizePolicy:
- resourceName: cpu
restartPolicy: NotRequired
- resourceName: memory
restartPolicy: RestartContainer
Источник
Please open Telegram to view this post
VIEW IN TELEGRAM
❤7👍5
Ключевое слово
А вы знали, что его можно использовать и для итерации по каналу, при этом выполнение остановится, когда канал будет закрыт?
👉 @GolangPortal
range в Go невероятно универсально. Его можно использовать для итерации по слайсам, мапам, и, хотя мне это не особо нравится, его также можно применять с одним целым числом, чтобы создать цикл for, который выполнится заданное количество раз. А вы знали, что его можно использовать и для итерации по каналу, при этом выполнение остановится, когда канал будет закрыт?
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11❤7
Кроссплатформенный SQL-редактор, доступный прямо из браузера и работающий как HTTP-сервер на Go. Предоставляет удобный интерфейс для лёгких ETL-задач, позволяя копировать данные между базами данных, таблицами, JSON и CSV-файлами
https://github.com/a-le/db-portal
👉 @GolangPortal
https://github.com/a-le/db-portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4❤3🔥2
time.Ticker в Go — это отличный инструмент для запуска одного и того же кода через заданные интервалы. Например, его можно использовать, чтобы каждые 5 минут проверять состояние сервера и отправлять уведомление, если с ним возникли проблемы.Please open Telegram to view this post
VIEW IN TELEGRAM
❤13👍6
Избегаем распространённых ошибок с sync.WaitGroup в Go
С выходом Go 1.25 в типе
В этой статье мы разберём эти изменения и посмотрим, как они помогают избежать распространённой гонки
🔹 Читать
👉 @GolangPortal
С выходом Go 1.25 в типе
sync.WaitGroup появилось два заметных изменения. Оба они связаны с типичными ошибками, которые разработчики часто допускают при работе с WaitGroup. В этой статье мы разберём эти изменения и посмотрим, как они помогают избежать распространённой гонки
Please open Telegram to view this post
VIEW IN TELEGRAM
❤6👍2
Библиотека
https://www.calhoun.io/simpler-faster-concurrent-testing-with-synctest/
👉 @GolangPortal
testing/synctest — отличное решение, которое упрощает тесты в golang, связанные с временем или конкурентным кодом. Если у вас есть тесты, которые ведут себя нестабильно из-за использования time.Now(), таймаутов или интервалов, обязательно обратите внимание на synctest.https://www.calhoun.io/simpler-faster-concurrent-testing-with-synctest/
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2👍2
Что нового в Go 1.25? Разбор с примерами
https://www.freecodecamp.org/news/what-is-new-in-go/
👉 @GolangPortal
https://www.freecodecamp.org/news/what-is-new-in-go/
Please open Telegram to view this post
VIEW IN TELEGRAM
❤6👍5
Паттерн or-channel в Go — мощный паттерн конкурентности, используемый для объединения нескольких каналов
👉 @GolangPortal
done в один. Этот новый канал закрывается, как только закрывается любой из входных каналов, фактически выступая единым сигналом завершения или отменыPlease open Telegram to view this post
VIEW IN TELEGRAM
👍12❤3
Создание структуры Go из XML-документа. Полученная структура лучше всего подходит для чтения XML
https://github.com/miku/zek
👉 @GolangPortal
https://github.com/miku/zek
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7❤3
«Новый экспериментальный Go API для работы с JSON» от Joe Tsai, Daniel Martí, Johan Brandhorst-Satzkorn, Roger Peppe, Chris Hines и Damien Neil
Этот пост посвящён новым экспериментальным пакетам Go 1.25:
Читать: https://go.dev/blog/jsonv2-exp
👉 @GolangPortal
Этот пост посвящён новым экспериментальным пакетам Go 1.25:
encoding/json/v2 и encoding/json/jsontext, которые приносят долгожданные улучшения и исправленияЧитать: https://go.dev/blog/jsonv2-exp
Please open Telegram to view this post
VIEW IN TELEGRAM
go.dev
A new experimental Go API for JSON - The Go Programming Language
Go 1.25 introduces experimental support for encoding/json/jsontext and encoding/json/v2 packages.
❤2👍2
Используете
👉 @GolangPortal
sync.WaitGroup в коде на Go, чтобы отслеживать завершение горутин? Избегайте распространённой ошибки: вызова Add внутри самой горутины. В Go 1.25 для этого даже добавили проверку в go vet, а также вспомогательную функцию WaitGroup.Go, чтобы помочь избежать этой проблемыPlease open Telegram to view this post
VIEW IN TELEGRAM
👍11❤5
Задача на собеседовании по Go:
Обработать 5 элементов массива, используя максимум 3 горутины.
Мой подход:
- Паттерн Worker Pool.
Но есть ли способ попроще?🤔
👉 @GolangPortal
Обработать 5 элементов массива, используя максимум 3 горутины.
Мой подход:
- Паттерн Worker Pool.
Но есть ли способ попроще?
Что такое worker pool?
В общем случае worker pool — это набор потоков, ожидающих назначения задач.
Как только назначенная задача завершена, один из потоков снова становится доступен для следующей задачи.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤8👍3
Интересная статья: Как реализовать кеш в Golang API
В этой статье разберём, что такое кеширование, зачем оно нужно, какие существуют стратегии кеширования и как реализовать кеширующий слой в наших Golang API
Читаем здесь
👉 @GolangPortal
В этой статье разберём, что такое кеширование, зачем оно нужно, какие существуют стратегии кеширования и как реализовать кеширующий слой в наших Golang API
Читаем здесь
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3❤2
Фреймворк на Go на базе LLM для глубокого понимания документов, семантического поиска и контекстно-зависимых ответов с использованием парадигмы RAG.
GitHub: WeKnora
👉 @GolangPortal
GitHub: WeKnora
Please open Telegram to view this post
VIEW IN TELEGRAM
❤10👍4
Начни работу с Docker на практике
Вот подборка годных практических заданий:
👉 @GolangPortal
Вот подборка годных практических заданий:
Установи Docker Engine на Linux: https://labs.iximiuz.com/challenges/docker-install-on-ubuntu
Запусти свои первые контейнеры: https://labs.iximiuz.com/challenges/docker-101-container-run
Собери и опубликуй свои первые образы: https://labs.iximiuz.com/challenges/build-and-publish-container-image-with-docker
Перемещай образы между репозиториями: https://labs.iximiuz.com/challenges/copy-container-image-from-one-repository-to-another-with-docker
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4❤3
Forwarded from IT Portal
This media is not supported in your browser
VIEW IN TELEGRAM
Сегодня отмечается День программиста!
256-й день года выбран не случайно:
С праздником, коллеги!☺️
@IT_Portal
256-й день года выбран не случайно:
Дата праздника объясняется расчетом: 2 (двоичная система исчисления) в степени 8 (количество битов в байте). То есть 2^8= 256. Поэтому в обычный год день программиста 13 сентября, а в високосный — 12 сентября
С праздником, коллеги!
@IT_Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍20❤10