Golang Portal
7.9K subscribers
404 photos
26 videos
7 files
438 links
Присоединяйтесь к нашему каналу и погрузитесь в мир для Golang-разработчика

Связь: @devmangx
Download Telegram
12 лучших ресурсов по Go. Забирайте ссылки:

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


👉 @GolangPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍17🔥65
Кэш на Go, CAS-безопасный, с одиночными элементами, валидируемыми при чтении, валидацией пакетного Set, подключаемыми провайдерами/кодеками и опциональными общими поколениями

https://github.com/unkn0wn-root/cascache

👉 @GolangPortal
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.

Как

Вместо обычного 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 и память перечисляются отдельно, и для каждого выбирается политика перезапуска. Доступны два значения:

🔹NotRequired: Kubernetes попытается изменить значения ресурсов на месте, пока контейнер работает. Это значение по умолчанию. Это best-effort: если рантайм не может безопасно применить изменение (особенно при уменьшении памяти), операция завершится ошибкой вместо принудительного перезапуска.

🔹RestartContainer: чтобы применить новые настройки ресурсов, Kubernetes обязан перезапустить контейнер. Полезно для приложений, которые читают лимиты ресурсов только при старте, например некоторые JVM-нагрузки.

Пример:
resizePolicy:
- resourceName: cpu
restartPolicy: NotRequired
- resourceName: memory
restartPolicy: RestartContainer


Источник

👉 @GolangPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
7👍5
Ключевое слово range в Go невероятно универсально. Его можно использовать для итерации по слайсам, мапам, и, хотя мне это не особо нравится, его также можно применять с одним целым числом, чтобы создать цикл for, который выполнится заданное количество раз.

А вы знали, что его можно использовать и для итерации по каналу, при этом выполнение остановится, когда канал будет закрыт?

👉 @GolangPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍117
Кроссплатформенный SQL-редактор, доступный прямо из браузера и работающий как HTTP-сервер на Go. Предоставляет удобный интерфейс для лёгких ETL-задач, позволяя копировать данные между базами данных, таблицами, JSON и CSV-файлами

https://github.com/a-le/db-portal

👉 @GolangPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍43🔥2
time.Ticker в Go — это отличный инструмент для запуска одного и того же кода через заданные интервалы. Например, его можно использовать, чтобы каждые 5 минут проверять состояние сервера и отправлять уведомление, если с ним возникли проблемы.

👉 @GolangPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
13👍6
Избегаем распространённых ошибок с sync.WaitGroup в Go

С выходом Go 1.25 в типе sync.WaitGroup появилось два заметных изменения. Оба они связаны с типичными ошибками, которые разработчики часто допускают при работе с WaitGroup.

В этой статье мы разберём эти изменения и посмотрим, как они помогают избежать распространённой гонки

🔹Читать

👉 @GolangPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
6👍2
Библиотека testing/synctest — отличное решение, которое упрощает тесты в golang, связанные с временем или конкурентным кодом. Если у вас есть тесты, которые ведут себя нестабильно из-за использования time.Now(), таймаутов или интервалов, обязательно обратите внимание на synctest.

https://www.calhoun.io/simpler-faster-concurrent-testing-with-synctest/

👉 @GolangPortal
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
Please open Telegram to view this post
VIEW IN TELEGRAM
6👍5
Паттерн or-channel в Go — мощный паттерн конкурентности, используемый для объединения нескольких каналов done в один. Этот новый канал закрывается, как только закрывается любой из входных каналов, фактически выступая единым сигналом завершения или отмены

👉 @GolangPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍123
Создание структуры Go из XML-документа. Полученная структура лучше всего подходит для чтения XML

https://github.com/miku/zek

👉 @GolangPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍73
«Новый экспериментальный Go API для работы с JSON» от Joe Tsai, Daniel Martí, Johan Brandhorst-Satzkorn, Roger Peppe, Chris Hines и Damien Neil

Этот пост посвящён новым экспериментальным пакетам Go 1.25: encoding/json/v2 и encoding/json/jsontext, которые приносят долгожданные улучшения и исправления

Читать: https://go.dev/blog/jsonv2-exp

👉 @GolangPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
2👍2
Используете sync.WaitGroup в коде на Go, чтобы отслеживать завершение горутин? Избегайте распространённой ошибки: вызова Add внутри самой горутины. В Go 1.25 для этого даже добавили проверку в go vet, а также вспомогательную функцию WaitGroup.Go, чтобы помочь избежать этой проблемы

👉 @GolangPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍115
Задача на собеседовании по Go:

Обработать 5 элементов массива, используя максимум 3 горутины.
Мой подход:

- Паттерн Worker Pool.

Но есть ли способ попроще? 🤔

Что такое worker pool?
В общем случае worker pool — это набор потоков, ожидающих назначения задач.
Как только назначенная задача завершена, один из потоков снова становится доступен для следующей задачи.


👉 @GolangPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
8👍3
Интересная статья: Как реализовать кеш в Golang API

В этой статье разберём, что такое кеширование, зачем оно нужно, какие существуют стратегии кеширования и как реализовать кеширующий слой в наших Golang API

Читаем здесь

👉 @GolangPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍32
Фреймворк на Go на базе LLM для глубокого понимания документов, семантического поиска и контекстно-зависимых ответов с использованием парадигмы RAG.

GitHub: WeKnora

👉 @GolangPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
10👍4
Начни работу с Docker на практике

Вот подборка годных практических заданий:

Установи 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


👉 @GolangPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍43
Forwarded from IT Portal
This media is not supported in your browser
VIEW IN TELEGRAM
Сегодня отмечается День программиста!

256-й день года выбран не случайно:
Дата праздника объясняется расчетом: 2 (двоичная система исчисления) в степени 8 (количество битов в байте). То есть 2^8= 256. Поэтому в обычный год день программиста 13 сентября, а в високосный — 12 сентября


С праздником, коллеги! ☺️

@IT_Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2010