Обновить
175.15

Go *

Компилируемый, многопоточный язык программирования

Сначала показывать
Период
Уровень сложности

Уведомления через Telegram-бота при помощи почтового триггера Yandex Cloud Functions

Уровень сложностиПростой
Время на прочтение4 мин
Охват и читатели9.5K

Привет, Хабр!

Возможно, многие сталкивались с задачей: есть сервер с некими cronjob-ами, результат выполнения которых хотелось бы мониторить определенному числу лиц, но при этом сервер находится в каком-нибудь intranet и не имеет доступа к сети интернет. Вот и у нас однажды возникла подобная проблема. Единственным доступным средством коммуникации с внешним миром у сервера был почтовый шлюз, через который можно было отправить электронную почту. До некоторого времени задача решалась отправкой нескольких копий письма, но со временем стало понятно, что гораздо  удобнее читать уведомления в Telegram. Такую настройку мы произвели с помощью Yandex Cloud Functions.

Читать далее

Обзор библиотеки Go Kit

Уровень сложностиПростой
Время на прочтение10 мин
Охват и читатели7.5K

Салют, Хабр!

Go Kit предоставляет стандартизированный способ создания сервисов, с ее помощью можно легко реализовать совместимость сервисов. С его помощью можно легко интегрировать различные транспортные протоколы, такие как HTTP, RPC, gRPC, и многое другое, а также реализовывать общие паттерны: логирование, метрики, трассировка. В общем, Go Kit хорошо подходит для разработки микросервисов на go.

Мотивацию создания этой либы разработчики описали так:

Go стал языком сервера, но он по-прежнему недостаточно представлен в так называемых «современных корпоративных» компаниях, таких как Facebook, Twitter, Netflix и SoundCloud. Многие из этих организаций обратились к стекам на основе JVM для создания своей бизнес-логики, во многом благодаря библиотекам и экосистемам, которые напрямую поддерживают их микросервисные архитектуры.

Чтобы достичь следующего уровня успеха, Go нужно нечто большее, чем простые примитивы и идиомы. Ему нужен всеобъемлющий набор инструментов для последовательного распределенного программирования в целом. Go Kit — это набор пакетов и лучших практик, которые обеспечивают комплексный, надежный и надежный способ создания микросервисов для организаций любого размера.

Читать далее

Делим монорепозиторий библиотеки Go на отдельные модули и адаптируем их для локальной разработки

Время на прочтение3 мин
Охват и читатели7.2K

Библиотека Go в Авито увеличилась с 4 драйверов до 7, и на всё стало не хватать единого модуля. Рассказал, как разделил монорепозиторий на отдельные модули и адаптировал его для разработки в локальной среде.

Читать далее

Баги, которые мы пишем, ищем и исправляем

Уровень сложностиСредний
Время на прочтение11 мин
Охват и читатели2.6K

Привет! Меня зовут Денис, я - разработчик ПО SEDMAX. Это промышленное ПО для сбора и визуализации данных в энергетике. Как и у всех, у нас бывают баги. Мне бы хотелось поделиться опытом в поиске таких багов, а так же порассуждать на тему того, что необходимо было сделать, чтобы баг не появился. У нас серверная часть написана на go в виде некоторого множества сервисов, поэтому специфика большинства багов будет асинхронное взаимодействие, а код примеров представлен на go.

Читать далее

SOLID и DRY в Go

Уровень сложностиПростой
Время на прочтение5 мин
Охват и читатели16K

Привет, Хабр!

Все знают, что SOLID и DRY делают код более чистым, гибким и, что немаловажно, понятным для других разрабов. Каждый компонент выполняет свою функцию и вместе они создают гармонию.

В этой статье рассмотрим как эти принципы применяются в golang.

Читать далее

Антипаттерны в TDD

Уровень сложностиПростой
Время на прочтение8 мин
Охват и читатели5.6K

Время от времени необходимо пересматривать свои методы TDD и напоминать себе, каких моделей поведения следует избегать.

Процесс TDD концептуально прост, но по мере его выполнения вы обнаружите, что он бросает вызов вашим навыкам проектирования. Не путайте это с тем, что TDD - это сложно, сложно именно проектирование!

В этой статье приводится ряд антипаттернов TDD и тестирования, а также способы их устранения.

Читать далее

Ускоряем разработку новых фич: как я написал плагин кодогенерации для Protobuf

Время на прочтение13 мин
Охват и читатели3.5K

Всем привет! Меня зовут Ефим Воробьёв, я учусь на программиста в университете, создаю свои проекты и работаю в стартапе. Я с девятого класса разрабатывал веб-приложения на PHP и Python, зарабатывая на фрилансе. Со временем я понял, что хочу развиваться дальше, и поступил на курс «Go-разработчик» в Практикуме

С новыми знаниями я пришёл в стартап «умных дверей». Для него я написал плагин для Protobuf, который собирает служебную информацию из proto-файлов, сопоставляет её с информацией от контроллера и преобразует в понятный человеку формат. Это происходит автоматически и без использования рефлексии.

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

Читать далее

Простейший пример kafka + golang

Уровень сложностиПростой
Время на прочтение5 мин
Охват и читатели46K

В данной статье представлен простой способ реализации микросервисной архитектуры с использованием Kafka, Golang и Docker.

Читать далее

Планирование в Go: Часть III — Конкурентность

Уровень сложностиПростой
Время на прочтение13 мин
Охват и читатели7.9K

Это третья статья из серии, состоящей из трёх частей, в которой мы рассмотрим механику и семантику планировщика в Go. Эта статья посвящена конкурентности.

Читать далее

Дебажим Golang с помощью Delve

Уровень сложностиПростой
Время на прочтение10 мин
Охват и читатели25K

В этой статье мы рассмотрим, как дебажить программы, написанные на Golang, с помощью Delve. Delve — это сторонний отладчик для Go, скачать на github по ссылке https://github.com/go-delve/delve. Это хорошая альтернатива отладчику GDB golang (https://golang.org/doc/gdb), так как Delve куда больше возможностей для работы.

Читать далее

Лучшие Golang-фреймворки в 2023 году

Время на прочтение3 мин
Охват и читатели46K

Revel: для быстрой разработки и масштабируемости

Revel — один из самых популярных фреймворков для разработки веб-приложений на Golang в текущем году. Он прост в изучении и использовании; подходит как для начинающих, так и для опытных специалистов. Хорошо справляется с быстрой разработкой приложений, демонстрирует высокую масштабируемость и производительность.

Читать далее

Русские шашки: эффективная генерация ходов в Golang

Уровень сложностиПростой
Время на прочтение3 мин
Охват и читатели16K

Я рад представить вам свою реализацию ИИ для русских шашек под названием "damka" (https://github.com/antonmedv/damka). Проект, размещенный на GitHub и доступен для игры по адресу https://medv.io/шашки/, включает в себя ИИ, который следует правилам игры в русские шашки

Читать далее

Клиент Ozon Seller API на Golang

Уровень сложностиПростой
Время на прочтение2 мин
Охват и читатели5.2K

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

Для чего он нужен и как им можно пользоваться? Например, если вы продаете на нескольких площадках, то целесообразнее было бы хранить информацию о товаре в структурированном виде и добавлять их на площадки при помощи API. Так вы сэкономите время и убережете себя от ошибок. Также легко копировать карточки с одной площадки на другую. Или можно написать сайт с статистикой о продажах по категориям на основе данных продавцов, полученных при помощи API.

Читать далее

Ближайшие события

Архитектура Hashicorp Vault

Уровень сложностиСредний
Время на прочтение3 мин
Охват и читатели10K

В данной статье описал схему маршрутизации и получения данных в hashicorp vault(это зашифированное хранилище секретов с доступом по политикам). Возможно будет полезно тем, кто думает над архитектурой сервера или слоем(‑ми) доступа к данным.

Читать далее

Выбираем IAM в 2023 или, что есть кроме Keycloak

Время на прочтение4 мин
Охват и читатели36K

Гипотетическая ситуация — ваш работодатель поручил вам выбрать Identity and Access Management platform.

Обязательно: open‑source (Apache 2.0), self‑hosted, OAuth 2.0, OIDC, SAML, LDAP.

Для тех кому интересно узнать, что есть еще кроме Keycloak.

Узнать

Брифинг по дженерикам Go 1.18

Время на прочтение9 мин
Охват и читатели5.6K

Добавление дженериков (generics) в Go (ранее Golang) — самое значительное изменение, которое он претерпел, с момента его релиза. Сообщество Go просило добавить дженерики с самых первых дней языка, и мы, наконец, дождались.

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

Читать далее

Разбираемся с рекурсией на примере связных списков

Время на прочтение10 мин
Охват и читатели6.3K
Разбираемся с рекурсией на примере связных списков.
Разбираемся с рекурсией на примере связных списков.
Разбираемся с рекурсией на примере связных списков.
Разбираемся с рек-ОШИБКА: ПЕРЕПОЛНЕНИЕ БУФЕРА

image
Матрёшка в разобранном виде
Читать дальше →

TLS 1.3, только игрушечный

Время на прочтение11 мин
Охват и читатели10K

Привет! Недавно я думала о том, насколько интересно изучать компьютерные сети, создавая рабочие версии реальных сетевых протоколов.


Мне пришло в голову, почему бы после создания своей версии протоколов traceroute, TCP и DNS не воплотить в жизнь TLS? Могу ли я сделать вариант TLS и больше узнать о его работе?


Я спросила в Twitter, сложно ли это, мне [помогли] и посоветовали, с чего начать, и я решила попробовать.

Читать дальше →

Приглашаем на онлайновый митап про нативный фаззинг в 1.18 Go и его особенности

Время на прочтение1 мин
Охват и читатели1.5K
В четверг, 22 сентября, в 16 часов (МСК) мы проведем онлайновый митап под названием «Фаззинг и обработка ошибок в 1.18 Go».

UPD: В свете известных событий митап переносится на 20 октября.

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



Читать дальше →

Go sync/singleflight: устранение дублирования идентичных запросов

Время на прочтение17 мин
Охват и читатели11K

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

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

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

Читать далее

Вклад авторов