golang українською
79 subscribers
10 photos
1 video
60 links
Telegram автора: @nesymno
Linkedin автора: bit.ly/nesymno-linkedin
Github каналу: bit.ly/uagolang-github
Download Telegram
Хочу задати питання: чи працював хтось з кубернетісом? (хоча б в плані, що інфра там всередині)
Чи був у вас досвід як розробника в налаштуванні k8s кластерів чи, можливо, встановлення якихось інших сервісів, необхідних для функціонування?
Поділіться досвідом, якщо він у вас був, будь ласка! 🫡
Всім привіт. Сьогодні п'ятниця, а це означає, що настав час поділитись цікавими проектами на Go!

1. Fx - DI фреймворк від Uber. Дозволяє легко організувати додаток на основі модулів та забезпечує автоматичну ініціалізацію залежностей. Не раз стикався з проблемою DI у великих проєктах, і Fx реально вирішує більшість болей. Спочатку може здаватися складним, але розібратись однозначно варто. Використовую в продакшені.

🔗 Репозиторій: https://github.com/uber-go/fx

2. Microservices Framework Go-Micro - фреймворк для створення мікросервісів на Go. Забезпечує реєстрацію сервісів, балансування навантаження, обробку запитів, гнучку аутентифікацію та підтримку плагінів. Коли треба було швидко запустити кілька сервісів, що спілкуються через gRPC, go-micro реально зекономив купу часу. Великий плюс – підтримка плагінів, що дозволяє легко кастомізувати під свої потреби. Використовував в продакшені.

🔗 Репозиторій: https://github.com/go-micro/go-micro

3. CLI Framework Cobra - фреймворк для створення командних інтерфейсів у Go. Використовується в kubectl, hugo, helm та багатьох інших відомих CLI-додатках. Писати CLI без cobra – те ще задоволення. Коли вперше спробував, реально оцінив, наскільки зручно працювати з командами та аргументами. Якщо тобі треба створити CLI-утиліту – рекомендую.

🔗 Репозиторій: https://github.com/spf13/cobra

4. Configuration Management Viper - бібліотека для зчитування конфігурацій у Go. Підтримує YAML, JSON, TOML, env-змінні, прапори CLI та віддалені конфігураційні сховища. Можливість працювати з конфігами в різних форматах та перемикатися між ними без змін коду – те, що треба для будь-якого серйозного проєкту. Використовую всюди, де є складна конфігурація.

🔗 Репозиторій: https://github.com/spf13/viper

5. Lightweight DI: Do - ще одна бібліотека для DI, але набагато легша, ніж Fx. Дозволяє зручно реєструвати та використовувати залежності без зайвої магії. Якщо Fx здається занадто складним або надлишковим, do – чудова альтернатива. Дуже проста у використанні та добре підійде для будь-яких проєктів. Використовую в продакшені.

🔗 Репозиторій: https://github.com/samber/do

Став 👍 якщо сподобався матеріал, пропонуй теми для статей чи питання, що потребують освітлення!
Слава Україні 🇺🇦🇺🇦

#підбірки@uagolang
———————
golang українською
🇺🇦
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
Всім привіт! Нарешті закінчив другу статтю з циклу по операторам k8s! Це зайняло більше часу, ніж я очікував.
Надіюсь, вам сподобається, я дуже старався 🙂

Українською:
https://uagolang.notion.site/k8s-2-1800710a945c8082a56cfa6a9d181008

English:
https://uagolang.notion.site/Manage-k8s-resources-using-operators-Part-2-1800710a945c81ef9d56d4bfafae66f2

Став 👍 якщо сподобався матеріал, пропонуй теми для статей чи питання, що потребують освітлення!
Слава Україні 🇺🇦🇺🇦

#авторське@uagolang #platform_engineering@uagolang #k8s@uagolang
———————
golang українською
🇺🇦
Please open Telegram to view this post
VIEW IN TELEGRAM
4👍1
golang українською pinned «Всім привіт! Нарешті закінчив другу статтю з циклу по операторам k8s! Це зайняло більше часу, ніж я очікував. Надіюсь, вам сподобається, я дуже старався 🙂 Українською: https://uagolang.notion.site/k8s-2-1800710a945c8082a56cfa6a9d181008 English: https://…»
Дні летять, наче навіжені 😱
Сьогодні знову п'ятниця, а це означає, що час поділитись новою підбіркою 👍

1️⃣ Logrus - гнучкий логгер з підтримкою рівнів логування та форматування JSON. Також є можливість писати хуки для обробки логів в залежності від їх рівня. Використовую майже в кожному проєкті.

🔗 Репозиторій: https://github.com/sirupsen/logrus

2️⃣ Anteon (в минулому Ddosify) - модерний генератор навантаження та моніторингу k8s кластерів, який дозволяє тестувати API та веб-сайти на продуктивність. Він підтримує HTTP, HTTPS, WebSocket, TCP, UDP і може використовуватися як CLI або бібліотека. Чесно кажучи, поки сам його тільки тестую, можливо, напишу статтю за результатами досліджень.

🔗 Репозиторій: https://github.com/getanteon/anteon

3️⃣ Compress - бібліотека для оптимізованого стиснення даних у форматах lz4, zstd, gzip, snappy. Вона швидша за стандартні бібліотеки Go і споживає менше пам’яті, а також має підтримку багатопотокового стиснення. Рекомендую для продакшена.

🔗 Репозиторій: https://github.com/klauspost/compress

4️⃣ Prometheus go-клієнт - офіційний клієнт для інтеграції Prometheus у Go-додатки. Він дозволяє збирати метрики та моніторити різні характеристики: CPU, RAM, HTTP-запити тощо. Думаю, багато хто тут так чи інакше працював з Prometheus, а якщо ні - спробуйте. Метрики і моніторинг must have для будь-якого проєкту в продакшені.

🔗 Репозиторій: https://github.com/prometheus/client_golang

5️⃣ ChromeDP - потужний інструмент для автоматизації браузера Chrome, який працює напряму через Chrome DevTools Protocol (CDP). Він дозволяє керувати браузером без потреби в Selenium/WebDriver і писати e2e тести на Go! Підтримує headless-режим та вміє робити скріншоти. Якщо хочете перенести автоматизоване тестування з Java чи JS - варто звернути увагу.

🔗 Репозиторій: https://github.com/chromedp/chromedp

Став 👍 якщо сподобався матеріал, пропонуй теми для статей чи питання, що потребують освітлення!
Слава Україні 🇺🇦🇺🇦

#підбірки@uagolang
———————
golang українською
🇺🇦
Please open Telegram to view this post
VIEW IN TELEGRAM
👍31
Media is too big
VIEW IN TELEGRAM
Побачив на просторах іншого Go комʼюніті. Що це? Це - скарб, ахахаха
🤣3
Доброго ранку, шановні колеги! Сьогодні я хотів би поділитись репозиторієм нашого ком'юніті, де будуть зібрані практичні приклади вирішення тих чи інших проблем, або ж розгляд цікавих питань щодо роботи golang всередині, які не тягнуть на окрему статтю (адже їх вже й так багато різних на різний смак, а у мене немає стільки часу на написання великої кількості).

Прошу переглянути. Прикладів поки небагато, але деякі з них доволі цікаві. Хтось просив пояснити alignment в структурах - там це є.

https://github.com/uagolang/practice

В коментарях пишіть, які теми цікавлять ще. Особисто в мене в планах на найближчий час більш детально зупинитись на конкурентності та патернах для вирішення проблем з нею пов'язаних 🙈

Став 👍 якщо сподобався матеріал!
Слава Україні 🇺🇦🇺🇦

#practice@uagolang
———————
golang українською
🇺🇦
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍21
Всім доброго ранку! Займаюсь 3 частиною статті по операторам в k8s.
Випустити планую наступного тижня. Це буде заключна стаття, в якій розберемо, як писати тести для реконсайлера ресурсів.
Має бути цікаво! Буде розглянуто декілька видів тестів. Вважаю, що це дасть всім більше розуміння щодо того - що і навіщо покривати тестами. Як мінімум, в першу чергу :)

Stay tuned!

#announce@uagolang
———————
golang українською
🇺🇦
Please open Telegram to view this post
VIEW IN TELEGRAM
6
Всім привіт! Дуже вибачаюсь, в п'ятницю підбірка не вийшла. Була накладка з часом останні декілька днів, не встиг її закінчити 🙃
Але технічний борг має бути закритим, тож давайте розглянемо сьогоднішню підбірку!

1⃣ Watermill – бібліотека для побудови event-driven систем. Дозволяє легко реалізувати pub/sub-архітектуру, підтримує Kafka, NATS, Google Pub/Sub та інші брокери повідомлень. В продакшені не використовував.

🔗 Репозиторій: github.com/ThreeDotsLabs/watermill

2⃣ Gookit Event – простий та ефективний інструмент для роботи з подіями у Go. Дозволяє легко додавати event-driven логіку до застосунків, підтримує синхронне та асинхронне виконання обробників.

🔗 Репозиторій: https://github.com/gookit/event

3⃣ GoFeatureFlag – lightweight система фіча-флагів для Go-додатків. Дозволяє керувати функціоналом без зміни коду, підтримує JSON, файли, REST API та віддалені конфігурації. Дає можливість проводити A/B-тестування. Використовував в продакшені.

🔗 Репозиторій: https://github.com/thomaspoignant/go-feature-flag

4⃣ Carbon – зручна бібліотека для роботи з датами та часом у Go. Вона робить форматування, парсинг та маніпуляції з датами простішими та інтуїтивнішими. Має можливість підключення i18n та має багато підтримуваних мов, в тому числі і українську 👍

🔗 Репозиторій: https://github.com/dromara/carbon

5⃣ Fyne – кросплатформовий UI-фреймворк для створення нативних десктоп-додатків на Go. Підтримує Windows, macOS, Linux, Android та iOS! Призначений для створення програм, які запускаються на десктопних і мобільних пристроях з єдиною кодовою базою.

🔗 Репозиторій: https://github.com/fyne-io/fyne

Став 👍 якщо сподобався матеріал, пропонуй теми для статей чи питання, що потребують освітлення!
Слава Україні 🇺🇦🇺🇦

#підбірки@uagolang #friday5@uagolang
———————
golang українською
🇺🇦
Please open Telegram to view this post
VIEW IN TELEGRAM
2👍5
Всім привіт! Планував завтра випускати статтю, але схоже, що не встигну. Тому стаття буде доступна в понеділок, 17 березня.
Вибачаюсь, тестування займає набагато більше часу, ніж просто імплементація :(

#announce@uagolang
———————
golang українською
🇺🇦
Please open Telegram to view this post
VIEW IN TELEGRAM
3
Всім привіт та вітаю з п'ятницею! Сьогодні все по плану, і я його притримуюсь. Отже, погнали! 👋

1⃣ Lo – чули про lodash в js? Це те ж саме, тільки на Go. Потужний пакет, що дозволяє значно скоротити кількість коду шляхом використання готових функцій для роботи зі слайсами та мапами. Все на дженериках. Використовую в продакшені.

🔗 Репозиторій: https://github.com/samber/lo

2⃣ Env – простий та зрозумілий парсер змінних середовища в структуру. Під капотом рефлексія. Використовую в продакшені.

🔗 Репозиторій: https://github.com/caarlos0/env

3⃣ Conc – бібліотека, що реалізує всі основні способи синхронізації горутин, даючи приємний синтаксичний цукор та зменшення кількості коду. Особисто я не використовую в продакшені. І вам не раджу, якщо ви не розумієте принципів та інструментів синхронізації в Go. Це просто такий собі lodash для конкурентності.

🔗 Репозиторій: https://github.com/sourcegraph/conc

4⃣ CIRCL – бібліотека від Cloudflare, що дозволяє розгортати криптографічні алгоритми, що націлені на роботу з пост-квантовою та еліптичною криптографією. Звучить складно. Особисто я в цьому нічого не розумію поки, але так як розвиток квантових комп'ютерів продовжується - можна взяти для експериментів. Самі автори зазначають, що це не prod-ready версія. Та і де б ми її використовували?)

🔗 Репозиторій: https://github.com/cloudflare/circl

5⃣ Air – бібліотека, що забезпечує hot-reload для Go додатків. Проста в налаштуванні і працює добре, дуже корисно для локальної розробки. Я мав і негативний досвід - дебагер. Власне, так і не зміг його налаштувати для проєктів, що стартують (локально) на docker-compose чи просто в докері. В продакшені, звичайно, такого використовувати не варто. Лише для локальної розробки.

🔗 Репозиторій: https://github.com/air-verse/air

Став 👍 якщо сподобався матеріал! Розказуй знайомим гошникам про канал, це дуже допоможе йому в розвитку.
Слава Україні 🇺🇦🇺🇦

#підбірки@uagolang #friday5@uagolang
———————
golang українською
🇺🇦
Please open Telegram to view this post
VIEW IN TELEGRAM
1👎1
Всіх вітаю в цей тяжкий день - понеділок!
Бажаю всім вам гарного дня та хочу поділитись заключною частиною циклу статей про управління ресурсами в Kubernetes.

Сьогодні поговоримо про тестування загалом та відносно нашої задачі - покрити тестами наш оператор контролерів.
Занурюємось! Приємного прочитання!

Українською:
https://uagolang.notion.site/k8s-3-1800710a945c80df8193f1cf3c0a347a

English:
https://uagolang.notion.site/Manage-k8s-resources-using-operators-Part-3-1800710a945c818aa9b3f86277ec0632

Став 👍 якщо сподобався матеріал! Розказуй знайомим гошникам про канал, це дуже допоможе йому в розвитку.
Слава Україні 🇺🇦🇺🇦

#авторське@uagolang #kubernetes@uagolang #platform_engineering@uagolang
———————
golang українською
🇺🇦
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3👍1
Всім гошникам фізкульт-привіт 👋 в цю п'ятницю! РАСТовчанам - за кораблем 😂🙊
Як зазвичай, ловіть підбірку з 5 пакетів на Go, що можуть стати вам в нагоді!

1⃣ DiceDB - доволі нова, але дуже непогана (а іноді навіть краща) альтернатива Redis (який тепер ще й платним став). Особливістю цієї in-memory db є те, що підписавшись на ресурс, DiceDB сама буде сповіщати всіх підписників, а не навпаки як у випадку polling data.

🔗
Репозиторій: https://github.com/DiceDB

2⃣ bubbletea – фреймворк для створення консольних додатків на Go, що дозволяє розробляти багатофункціональні інтерактивні інтерфейси в терміналі. Не використовував, але хочу вивчити його.

🔗 Репозиторій: https://github.com/charmbracelet/bubbletea

3⃣ goyek – на мій погляд доволі новий, але перспективний пакет для рутинної автоматизації, що зазвичай робиться в Make. Все доволі просто і на Go. Особисто мені Make абсолютно підходить і об'єктивно швидше потрібну рутину автоматизувати там. Але якщо необхідне якесь комплексне рішення, що буде потребувати глибоких знань bash, то чому б не реалізувати це добре знайомою тобі мовою?

🔗 Репозиторій: https://github.com/goyek/goyek

4⃣ trivy - інструмент для виявлення вразливостей, неправильних конфігурацій та секретів у контейнерах, Kubernetes, кодових репозиторіях та хмарах.

🔗 Репозиторій: https://github.com/aquasecurity/trivy

5⃣ gocv – пакет на Go для computer vision, що дозволяє використовувати бібліотеку OpenCV 4 та деякі інші бібліотеки. Поки що не клацав, але цей пакет мене так зацікавив, що планую в ньому підрозібратись та написати статтю щодо його використання. Він може робити обробку відео, знаходити предмети в real-time і всяке таке, що пов'язано з Computer Vision. До речі, дуже перспективний напрямок в наш час, наприклад, знаходження цілі при втраті контролю під час дії РЕБ для дронів камікадзе.

🔗 Репозиторій: https://github.com/hybridgroup/gocv

Став 👍 якщо сподобався матеріал! Розказуй знайомим гошникам про канал, це дуже допоможе йому в розвитку.
Слава Україні 🇺🇦🇺🇦

#підбірки@uagolang #friday5@uagolang
———————
golang українською
🇺🇦
Please open Telegram to view this post
VIEW IN TELEGRAM
👍21
Всім доброго ранку! Надіюсь, виспались і готові вриватись в робочий тиждень!
Я ще думаю над своєю наступною статтею (можете щось пропонувати, але не щось тривіальне), а поки вирішив перекласти цікаву статтю про HTTP/2 та в Go зокрема.
Приємного прочитання!

Українською:
https://uagolang.notion.site/HTTP-2-Golang-1960710a945c8060bba6ca60b8952c49

Оригінал:
https://victoriametrics.com/blog/go-http2/index.html

Став 👍 якщо сподобався матеріал! Розказуй знайомим гошникам про канал, це дуже допоможе йому в розвитку.
Слава Україні 🇺🇦🇺🇦

#переклад@uagolang #http2@uagolang
———————
golang українською
🇺🇦
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6👍1
Ми ростемо, нас вже 54! Дуже вам дякую за довіру, далі - більше!
От думаю, можливо на 100 підписників зробити якийсь конкурс чи вебінар...
Ще не думав взагалі над деталями, просто прийшла в голову така ідея)

#offtop@uagolang
———————
golang українською
🇺🇦
Please open Telegram to view this post
VIEW IN TELEGRAM
4
На 100 підписників робимо
Anonymous Poll
21%
Конкурс з призами
79%
Вебінар
golang українською pinned «На 100 підписників робимо»
Знаєте, погрузився я трохи в це все гошне ком'юніті українське, і таке враження, що його ведуть студенти)
Це непогано, але має мало спільного з професійною діяльністю, як на мене...

Писати ігри на Go звичайно непогана навичка, але хорошого розробника від початківця відрізняє якраз досвід виконання певних типових (а іноді і зовсім нетипових) бізнес-задач. Я не претендую на істину останньої інстанції, а просто ділюсь думками виключно зі свого довіду.
Можеш написати Doom на Go? Це звичайно прекрасно, але у нас тут навантаження на сервера зросло і нам необхідно провести певне performance review потенційно ресурсо-затратних операцій в нашій системі... А можливо якийсь інструмент не виправдовує себе, або задачі, які наш бізнес вирішує, можна більш оптимально виконати за допомогою іншого, більш підходящого інструменту?

І яким би обізнаним гофером ти не був - важливі не максимально різнобічні знання (хоча і таке існує, але конкуренція, самі розумієте), а саме розуміння бізнес процесів та вплив написаного тобою коду на систему. З позитивного - мені дуже сподобалась ідея коротко розказувати про якісь нюанси в Go. Я був здивований, але Telegram вміє підсвічувати різні мови в code блоці.

Також планував зробити анонс наступної статті, але хай це буде сюрпризом 😈

#thoughts@uagolang
———————
golang українською
🇺🇦
Please open Telegram to view this post
VIEW IN TELEGRAM
🥴2
Всім привіт! Буду іноді закидати вам задачки. Якісь складні, якісь легкі - різні.
Почнемо з легкого, отже, що виведе даний код?
Чи бачите ви тут якісь помилки? Які? Як виправити і чому вони виникають?
Які потенційні проблеми в коді (в цьому, неправильному варіанті) ви бачите?

Playground: https://goplay.tools/snippet/VWtsgqD0_a6

Відповіді пишіть в коментарях та прикріплюйте також посилання на playground, як у мене.

package main

import (
"fmt"
"math/rand"
"sync"
"time"
)

func worker(id int, tasks <-chan int, results chan<- int, wg *sync.WaitGroup) {
defer wg.Done()

for task := range tasks {
delay := time.Duration(rand.Intn(300)) * time.Millisecond
time.Sleep(delay)

select {
case results <- task * 2:
fmt.Printf("Worker %d processed task %d\n", id, task)
case <-time.After(100 * time.Millisecond):
fmt.Printf("Worker %d timeout on task %d\n", id, task)
}
}
}

func main() {
rand.Seed(time.Now().UnixNano())
taskCount := 10
workerCount := 3

tasks := make(chan int, taskCount)
results := make(chan int, taskCount)

var wg sync.WaitGroup

for i := 1; i <= workerCount; i++ {
wg.Add(1)
go worker(i, tasks, results, &wg)
}

for i := 1; i <= taskCount; i++ {
tasks <- i
}
close(tasks)
close(results)

wg.Wait()

for res := range results {
fmt.Println("Result:", res)
}
}


#practice@uagolang #trytosolve@uagolang
———————
golang українською
🇺🇦
Please open Telegram to view this post
VIEW IN TELEGRAM
Всім доброго ранку! Всі ми не безгрішні - я також. Зрозумів свою помилку щодо завдання.
Необхідно враховувати конкретні задачі і умови виконання цих задач чітко, бо вийшло, що і не зрозуміло, а що код має робити, а що - ні.
Вибачте, для мене це було вперше. Але нічого, далі я буду давати чітку задачу разом з кодом.

Очікувана відповідь з моїми коментарями:
https://goplay.tools/snippet/NUxjHFKc-Q4

Дякую @andrsj та @intelimed, що витратили свій час, ви молодці! Надіюсь на участь багатьох в наступній задачі!

#offtop@uagolang
———————
golang українською
🇺🇦
Please open Telegram to view this post
VIEW IN TELEGRAM
🥴1