Go in Action

@go_in_action


Всё про язык программирования Go на русском и английском языке

Разместить рекламу: @tproger_sales_bot

Правила общения: https://tprg.ru/rules

Другие каналы: @tproger_channels

Go in Action

21 Jan, 00:27


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

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

Представь себе, что твоя программа обрабатывает запросы пользователей, одновременно загружает данные с сервера и проводит вычисления. И все это должно происходить без задержек и ошибок. Для всего этого у тебя есть горутинки! Однако если с ними обращаться неосторожно, то могут возникнуть такие ошибки, которые сложно будет сразу отловить. Вот здесь на сцену выходят паттерны многопоточности, которые помогают структурировать и оптимизировать параллельную работу.


Читать: https://habr.com/ru/articles/852556/

#ru

@go_in_action | Другие наши каналы

Go in Action

21 Jan, 00:26


Создание кастомного Kubernetes Scheduler для StatefulSet

В этой статье мы рассмотрим процесс создания кастомного scheduler'а для Kubernetes, ориентируясь на Kubernetes Scheduling Framework.

Обычно для назначения подов на вычислительные узлы используется стандартный планировщик, который, проанализировав различные параметры, автоматически выполнит оптимальное размещение (например, распределит поды таким образом, чтобы не размещать их на вычислительных узлах с недостаточными ресурсами).

В одном из наших проектов, где мы использовали оператор Strimzi для развёртывания кластеров Kafka, заказчик выдвинул специфические требования по размещению данных, резервному копированию и восстановлению.
Одним из ключевых пунктов стал вопрос строгой привязки экземпляров приложения к вычислительным узлам.
Для этого нам пришлось создать кастомный scheduler, учитывая нюансы инфраструктуры, особенности приложения и требуемые правила размещения.
Schedule Reading

Читать: https://habr.com/ru/articles/851896/

#ru

@go_in_action | Другие наши каналы

Go in Action

21 Jan, 00:25


Нашёл огромную библиотеку алгоритмов с открытым исходным кодом

Команда энтузиастов собрала обширную коллекцию алгоритмов, аккуратно распределила их по категориям и языкам программирования, а для удобства использования создала сайт.

Кстати, языков на этом ресурсе реально много — от популярных, по типу Python, Java и C#, до более нишевых, таких как R и Scala.

Полезно будет всем, так что берём на заметку

#алгоритмы

Go in Action

21 Jan, 00:25


Protobuf и buf: блеск, нищета и импортозамещение

Если для компиляции proto-файлов вы всё ещё используете protoc, самое время перестать и перейти на buf. Разберём, как это сделать и почему это необходимо. Также рассмотрим проблемы доступа к buf.build.

Меня зовут Эдгар Сипки, я Go-разработчик в Ozon Fintech. buf — мощная утилита для линтинга протофайлов, проверки обратной совместимости API, генерации кода и валидации запросов. Однако, из-за санкций она недоступна в России. Поэтому я расскажу, как мы разрабатывали собственное решение в рамках импортозамещения.


Читать: https://habr.com/ru/companies/oleg-bunin/articles/816631/?utm_campaign=816631

Go in Action

21 Jan, 00:20


Go-разработчики создают высоконагруженные сервисы в сферах онлайн-ритейла, доставки, финтеха, интернета вещей. Язык Go отличается масштабируемостью и высокой производительностью, поэтому с каждым годом профессия становится всё популярнее. 

Курс Практикума подойдёт тем, кто уже знаком с Go и хочет упорядочить свои знания, а также тем, кто хочет перейти на Go с другого языка программирования. 

— Вы сделаете 3 проекта с нуля и добавите их в портфолио 
— Научитесь писать сложные приложения на Go
— Освоите архитектурные паттерны

Начните курс бесплатно, а если понравится, платите как удобно: в рассрочку или целиком.

Присоединиться

Это #партнёрский пост

Go in Action

21 Jan, 00:19


Backend engineer, ваш выход

На новой вакансии вам предстоит:
— разрабатывать и внедрять масштабируемые и надёжные решения в области обработки потоковых и пакетных данных;
— определять и устранять проблемы производительности и масштабируемости в сложных частях продукта;
— активно участвовать в обзорах дизайна системы;
— улучшать общее качество кода и продукта.

Будет плюсом:
— опыт работы с оркестраторами потоков операций обработки данных: Apache Airflow, Prefect, Dagster;
— опыт работы с рекомендательными системами;
— опыт работы с облачными платформами.

Нажимайте, чтобы быть на связи

#вакансии #работа

Go in Action

21 Jan, 00:17


Второй год подряд ребята из DevCrowd проводят большое исследование Go-разработчиков

Вот что они анализируют:

— Что входит в обязанности и каких навыков не хватает.
— Сколько в среднем зарабатывают в профессии в зависимости от грейда.
— Какие инструменты, сервисы наиболее популярны.
— Что читают, слушают и смотрят для профессионального развития.

Результаты опроса помогут вам сравнить свои ожидания с рыночными, построить план своего развития, и просто понять, что происходит с индустрией!

Проходите опрос, делитесь своими мнениями и помогите сделать исследование максимально охватным. Организаторы обещают сравнить данные с прошлым годом и поделиться выводами публично уже в конце ноября.

Пройти опрос

Посмотреть результаты прошлого года

Go in Action

21 Jan, 00:17


Корутины: stackful vs stackless

В этой статье я хочу объяснить разницу между stackless и stackful корутинами: чем они отличаются, какие у них плюсы и минусы, а также в общих чертах рассказать, как в некоторых языках программирования реализована многопоточность.

Я стараюсь писать статьи простым и понятным языком, чтобы их мог понять как можно больший круг читателей. Поэтому в тексте будут сделаны упрощения.


Читать: https://habr.com/ru/articles/850970/

#ru

@go_in_action | Другие наши каналы

Go in Action

21 Jan, 00:16


Сделали квиз для нижегородских backend-разработчиков

Проверьте, насколько хорошо вы шарите в профессиональных терминах и архитектуре Нижнего. К тому же каждый вопрос украшен ламповой иллюстрацией города в стиле пиксель-арт: https://tprg.ru/ePN7

Это #партнёрский пост

Go in Action

21 Jan, 00:16


Переход на Go глазами PHP-разработчика: 5 подводных камней

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


Читать: https://habr.com/ru/companies/lamoda/articles/850456/

#ru

@go_in_action | Другие наши каналы

Go in Action

21 Jan, 00:16


Ошибки в Go: проблема и элегантное решение с библиотекой try

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

if err != nil {
return err
}


Читать: https://habr.com/ru/articles/850464/

#ru

@go_in_action | Другие наши каналы

Go in Action

21 Jan, 00:14


Go sync.WaitGroup и проблема с выравниванием

WaitGroup — это, по сути, способ дождаться, пока несколько горутин закончат свою работу. Мы начнем с основ, а затем разберемся, как это устроено под капотом.


Читать: https://habr.com/ru/articles/850018/

#ru

@go_in_action | Другие наши каналы

Go in Action

21 Jan, 00:11


Server Side Rendering на Go

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

Тогда я встал перед выбором: либо отказаться от Go на бэкенде, либо отказаться от Vue на фронтенде. Для меня выбор был очевиден: я остался с Go.

Генерация HTML на Go, в общем-то, не проблема: можно использовать готовые шаблонизаторы, вручную писать контроллеры и настроить WebPack для сборки статики. Но всё это долго и неудобно. А главное – я люблю писать программы, но ненавижу писать код. И тогда я задался целью: создать инструмент, который облегчит мне жизнь и будет автоматически решать большую часть задач за меня.

Мне нужен был генератор, который бы:

* Превращал Vue-подобные шаблоны в Go-код с типизированными переменными, позволяя ловить ошибки на этапе компиляции.

* Автоматически генерировал DataProvider интерфейсы для получения данных и, желательно, их базовую имплементацию.

* Собирал и подключал только нужные JS и CSS файлы из лежащих рядом с шаблонами TypeScript и SCSS файлов.

* Поддерживал переменные, выражения, условия и циклы в шаблонах, как во Vue.

* Объединял шаблоны из подпапок по принципу Vue-тега <router-view.

* Автоматически маршрутизировал страницы, поддерживая динамические параметры.

И главное – всё это должно работать в автоматическом режиме: изменения в исходном коде автоматически пересобираются и перезапускаются без лишних усилий.

После ряда экспериментов и нескольких ночей мне это кажется удалось. Под катом – подробный туториал, как разрабатывать быстрые и удобные сайты с помощью GoSSR.


Читать: https://habr.com/ru/articles/848640/

#ru

@go_in_action | Другие наши каналы

Go in Action

21 Jan, 00:08


Анонимная сеть в 100 строк кода на Go

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


Читать: https://habr.com/ru/articles/849552/

#ru

@go_in_action | Другие наши каналы

Go in Action

21 Jan, 00:03


Создание AI-ассистента с OpenAI Assistants API на Go

Всем привет!

Недавно возникла необходимость создать AI-ассистента, обученного искать и выдавать информацию из базы знаний, предоставленных заказчиком.

В этой статье мы рассмотрим процесс создания MVP такого ассистента. Мы загрузим в него файлы, зададим инструкции, привяжем все к Telegram-боту и будем обрабатывать запросы пользователей.

Для создания ассистента будем использовать функциональность OpenAI Assistants API с помощью сторонних прокси-сервисов.

Все это напишем на Go, а код, готовый к запуску и компиляции, будет доступен в конце статьи.

Приятного чтения!
К статье

Читать: https://habr.com/ru/articles/848624/

#ru

@go_in_action | Другие наши каналы

Go in Action

21 Jan, 00:03


Транзакции в БД на Go с использованием многослойной архитектуры

Когда я присоединяюсь к новой компании, меня часто посещает синдром самозванца. После всех этих собеседований кажется, что парни знают, что делают и я смиренно настравиаюсь учиться у лучших.

Однажды, я столкнулся с инцидентом на проде и обратился за помощью к самому опытному инженеру. Он пришел на помощь и с легкостью изменил значение в БД с помощью... ручного обновления.

Читать: https://habr.com/ru/articles/848596/

#ru

@go_in_action | Другие наши каналы

Go in Action

21 Jan, 00:03


Муравьиный алгоритм. Решение задачи коммивояжера

В данной статье я бы хотел объяснить работу алгоритма муравьиного алгоритма и решить с его помощью задачу коммивояжера. Решение задачи сводиться к выходу из какой-либо вершины графа, прохождению по всем вершинам по одному разу самым коротким путем и возврату к начальной точке. В конце статьи вас ожидает реализация алгоритма на языке Go.


Читать: https://habr.com/ru/articles/848590/

#ru

@go_in_action | Другие наши каналы

Go in Action

21 Jan, 00:01


Массивы и слайсы в Go — для собеседований

Набив несколько шишек поначалу мы начинаем довольно уверенно пользоваться массивами и слайсами в Go и обычно не сильно задумываемся над разными неприятными подробностями (если пишем достаточно аккуратно). Однако когда дело доходит до собеседований, оказывается что наши интуитивные представления легко могут дать сбой - где-то что-то забылось, а о каких-то нюансах может и не задумывались.

Здесь собраны несколько базовых вопросов встретившихся в последнюю сессию поисков работы :) вдруг поможет кому-то кто только вникает в язык - а кто-то, может, дополнит или поправит...
Ух, понеслись!

Читать: https://habr.com/ru/articles/848392/

#ru

@go_in_action | Другие наши каналы

Go in Action

21 Jan, 00:00


Как мы законтрибьютили целую строчку в HashiCorp Vault

Привет! Меня зовут Пётр Жучков, я руководитель группы хранения секретов и конфигураций в отделе Message Bus в Ozon. Мы отвечаем за поддержку и развитие системы хранения и использование секретов, активно сотрудничаем с ребятами из департамента информационной безопасности, чтобы все сервисы могли безопасно работать с секретами.

Основной наш инструмент для управления секретами — Vault. Он отличается хорошей функциональностью, а также имеет подробную документацию, благодаря которой можно быстро начать его использовать. Конечно, запустить Vault и подключить к своему сервису — это совсем не то же самое, что надёжно и безопасно предоставить платформенный доступ более 6000 сервисов и других инфраструктурных систем. Для нас крайне важно отдавать данные быстро и хранить безопасно.

Если вы хотите безопасно хранить секреты или просто погрузиться в gRPC и Go, то, думаю, вам будет интересно и полезно не повторять наши ошибки.

Далее я расскажу историю о том, как во время стандартной процедуры обслуживания Vault мы смогли положить его и потратили много времени и нервных клеток, чтобы вернуть в рабочее состояние.


Читать: https://habr.com/ru/companies/ozontech/articles/845290/

#ru

@go_in_action | Другие наши каналы

Go in Action

20 Jan, 23:59


Строим ETL-конвейер для машинного обучения с помощью Kafka, Clickhouse и Go

В этой статье я поделюсь с вами своим опытом использования Golang, Kafka и Clickhouse на примере простого ETL-конвейера для параллельной передачи JSON-данных в базу данных с последующим прогнозированием температуры на основе машинного обучения.


Читать: https://habr.com/ru/companies/otus/articles/847896/

#ru

@go_in_action | Другие наши каналы

Go in Action

20 Jan, 23:58


Алгоритм Прима

В данной статье я бы хотел объяснить работу алгоритма Прима. Алгоритм используется для нахождения минимального остовного дерева. Сам алгоритм очень прост, в статье хотел бы поделиться своей реализации на языке Go.


Читать: https://habr.com/ru/articles/847836/

#ru

@go_in_action | Другие наши каналы

Go in Action

20 Jan, 23:57


Как написать производительный и безопасный backend на Go

Backend на Go. Показываем, как написать бекенд на Го. Рассматриваем реальные примеры и кейсы Tproger

Читать: «Как написать производительный и безопасный backend на Go»

#ru

@go_in_action | Другие наши каналы

Go in Action

20 Jan, 23:57


Тестовое задание от гейм-студии (matchmaking, разбор)

На это задание я наткнулся в процессе недавнего поиска работы - компания занимающаяся разработкой игр (по-моему, Lesta Games) предлагала его выполнить до отклика на HH. То есть "присылайте отклик вместе со ссылкой на ваше решение" или в этом духе. А я обожаю тестовые задания - такой шанс быстро напедалить с нуля какой-то код и потом спокойно про него забыть :) Здесь задачка была сформулирована не слишком конкретно - мне такие кажутся скорее "поводом поговорить" - поэтому любопытно обсудить подобный кейс с сообществом, знатоками и сочувствующими. Речь шла про позицию Go-разработчика - но задание достаточно language-agnostic - так что читайте смело!
Итак, Задача!

Читать: https://habr.com/ru/articles/847538/

#ru

@go_in_action | Другие наши каналы

Go in Action

20 Jan, 23:54


Как подружить Gorm и PostGIS, решение промышленного уровня

GORM Фантастическая ORM для Golang.

PostGIS расширяет возможности реляционной базы данных PostgreSQL , добавляя поддержку хранения, индексирования и запросов геопространственных данных.

В этой статье поделимся своим опытом интеграции GORM и PostGIS, сложностями при попытке использования gorm для работы с геометрическими данными и конечно предлагаем готовое решение.
Изначально эта статья была опубликована здесь.


Читать: https://habr.com/ru/articles/847048/

#ru

@go_in_action | Другие наши каналы