Category : golang

golang
Паттерны многопоточности в Go

Привет! Ты читаешь эту статью, а значит интересуешься Go и хочешь прокачать свои навыки в многопоточности. Наверняка ты уже знаком и активно пользуешь примитивы многопоточного программирования (горутины, каналы, мьютексы). В этой статье я постараюсь рассказать о том как их компоновать в самые популярные паттерны для поддержки масштабируемости и удобства сопровождения будущих систем.Почему же многопоточность так важна? Сегодняшние приложения должны быть быстрыми и отзывчивыми, а для этого нужно …

  • четверг, 24 октября 2024 г. в 00:00:08
golang
Сравнение двух функций в Go с указателями и без

Меня часто спрашивают, почему указатели лучше? Шёрт побери, вот почему!Описание функций меняющих местами значения переменных: 1. Функция с указателями: func swapValues(first, second *int) { fmt.Println("Перед:", *first, *second) temp := *first *first = *second *second = temp fmt.Println("После:", *first, *second) }Эта функция использует указатели на целые числа (*int). При вызове функции передаются адреса переменных, что позволяет функции изменять реальные …

  • четверг, 24 октября 2024 г. в 00:00:06
golang
Развлекаемся с итераторами в Go

Релиз версии Go 1.23 добавил поддержку итераторов и пакет iter. Теперь можно перебирать константы, контейнеры (map, slice, array, string) и функции. Сначала создание итератора показалось мне неудобным, хотя в то же время его использование выглядело простым.Моя проблема с подходом к итераторам в Go заключается в том, что их нельзя «связывать» так,как это можно делать в JavaScript:[1,2,3,4] .reverse() .map(e => e*e) .filter(e => e % 2 == 0) .forEach(e => console.log(e)) Р…

  • четверг, 24 октября 2024 г. в 00:00:06
golang
Создание кастомного Kubernetes Scheduler для StatefulSet

В этой статье мы рассмотрим процесс создания кастомного scheduler'а для Kubernetes, ориентируясь на Kubernetes Scheduling Framework.Обычно для назначения подов на вычислительные узлы используется стандартный планировщик, который, проанализировав различные параметры, автоматически выполнит оптимальное размещение (например, распределит поды таким образом, чтобы не размещать их на вычислительных узлах с недостаточными ресурсами).В одном из наших проектов, где мы использовали оператор Strimzi д…

  • среда, 23 октября 2024 г. в 00:00:10
golang
Ошибки в Go: проблема и элегантное решение с библиотекой try

Все мы знаем: Go — это классный язык программирования. Простота, ясность, скорость компиляции — мечта разработчика. Но вот одна вещь может довести до белого каления — это обработка ошибок. В отличие от языков вроде Java или Python, где ошибки обрабатываются с помощью конструкции try-catch, Go предпочитает явный подход: большинство функций возвращают ошибку в виде второго значения, и разработчик обязан проверять её после каждого вызова. Это выглядит чисто и прозрачно, но на практике такие провер…

  • среда, 16 октября 2024 г. в 00:00:13
golang
Переход на Go глазами PHP-разработчика: 5 подводных камней

Хабр, привет! Меня зовут Костя Козин, я старший PHP-разработчик Lamoda Tech. За 17 лет в коммерческой разработке я писал на JS, PHP, и теперь на Golang. Сегодня в Lamoda Tech мы учим PHP-разработчиков писать на Go, и под это создали целый онбординг. Довольно часто в локальных обсуждениях я слышал, как тяжело дается переход с PHP на Go, а у некоторых первые месяцы работы с Go вовсе отбивают желание работать с языком. Поэтому я поделюсь подводными камнями, которые ожидают вас при переходе с одног…

  • среда, 16 октября 2024 г. в 00:00:12
golang
Go sync.WaitGroup и проблема с выравниванием

WaitGroup — это, по сути, способ дождаться, пока несколько горутин закончат свою работу. Мы начнем с основ, а затем разберемся, как это устроено под капотом.Есть классные статьи, где рассматривается несколько примитивов синхронизации в Go: Go Sync Mutex: Normal & Starvation ModeGo sync.Pool and the Mechanics Behind ItКаждый из них имеет свой набор проблем, и этот не отличается. Мы сосредоточимся на проблемах выравнивания WaitGroup, и как ее  внутренняя структура менялась в разных версиях.Эт…

  • вторник, 15 октября 2024 г. в 00:00:10
golang
Server Side Rendering на Go

Жизнь – это вечная спираль, где всё идёт по кругу, но с каждым витком становится лучше. Ещё 20 лет назад я писал веб-приложения на Perl + Template Toolkit 2, генерируя HTML на стороне сервера. Время шло, и веб-разработка разделилась на две половины: фронтенд и бэкенд, а между ними API. Со временем я переключился с Perl на Go для бэкенда и AngularJS, а потом и Vue для фронтенда. В таком стеке я создал несколько проектов, включая HighLoad.Fun. Писать API и генерировать клиентскую библиотеку на Ty…

  • воскресенье, 13 октября 2024 г. в 00:00:22
golang
Анонимная сеть в 100 строк кода на Go

ВведениеПрошло уже более года с тех пор как я написал статью - Анонимная сеть в 200 строк кода на Go. Пересмотрев её однажды осенним вечером я понял насколько всё в ней было ужасно - начиная с самого поведения логики кода и заканчивая его избыточностью. Сев за ноутбук и потратив от силы 20 минут у меня получилось написать сеть всего в 100 строк кода, используя лишь и только стандартную библиотеку языка.НачалоЕсли мы посмотрим на большинство анонимных сетей современности, то можно заметить, что …

  • пятница, 11 октября 2024 г. в 00:00:10