Все потоки
Поиск
Написать публикацию
Обновить
90.61

Go *

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

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

Дженерики в Go

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

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

Одна из последних и наиболее интересных фич в Golang — поддержка дженериков. Эта серия туториалов будет посвящена тому, что это такое, какую пользу приносит, когда их стоит использовать и как они меняют процесс написания приложений на Golang. Начнем же!

Читать далее

App.Farm CI. Часть I. Проблемы и выбор решений

Уровень сложностиПростой
Время на прочтение12 мин
Количество просмотров1.5K

Привет, Хабр! На связи команда разработки App.Farm — продукта, созданного в РСХБ‑Интех. Хотели бы представить вам цикл статей о нем.

App.Farm — продукт по типу PaaS, необходимый для стандартизации процесса разработки бизнес‑приложений: от хранения исходного кода до запуска сервисов. Основные подсистемы платформы включают хранилище исходного кода и CI, хранилище артефактов, среду исполнения приложений, SSO, интеграционную подсистему, observability и т. д..

Подробнее ознакомиться с компонентами можно в обзорной статье, ранее опубликованной на Хабре: Как мы создавали PaaS‑платформу App.Farm. Сейчас мы бы хотели углубиться в детали реализации и поделиться с вами проблемами, которые мы решали, и как пришли к текущей архитектуре. Первый цикл статей мы решили посвятить одной из подсистем нашей платформы — App.Farm CI.

Читать далее

Играть = учиться. Как я создал образовательную игру для школьников

Время на прочтение5 мин
Количество просмотров2.5K

Всем привет! Меня зовут Андрей Волков, уже более семи лет я занимаюсь разработкой. Начинал как системный администратор на кафедре информатики в моей альма-матер — РГУНГ им. И.М. Губкина, где поддерживал более 200 рабочих станций: от локальных сетей до огромных серверных стоек. Затем по стечению обстоятельств перешёл в отдел АСУ ЦБ. Там я занимался разработкой и поддержкой функционала информационных систем университета: от личного кабинета студента и расписания до внутренних HR- и СКУД-систем.

За свою карьеру я также успел поработать в продуктовой разработке в России и на аутстаффе с российскими и западными заказчиками. Моим основным стеком был Symfony/PHP. Спустя несколько лет работы на фреймворке Symfony благодаря курсу «Продвинутый Go-разработчик» от Яндекс Практикума у меня получилось сменить стек и уйти на позицию PHP/Go разработчика в компанию Rambler.

Читать далее

Go: нужно ли закрывать канал?

Уровень сложностиПростой
Время на прочтение14 мин
Количество просмотров5.3K

Эта статья посвящена каналам. Поднимается вопрос необходимости закрытия каналов. Приводится множество примеров, на escape-анализе и трассировке которых объясняются особенности сохранения каналов в памяти, взаимодействие с GC, горутинами. Также поднимается вопрос уместности закрытия каналов. Подсвечивается практическая польза использования однонаправленных каналов.

Читать далее

Go отлаживать на проде, избавляться от хардкода и переходить на Ginkgo/Gomega: доклады для гоферов

Время на прочтение2 мин
Количество просмотров2.7K

Что делать, если сервис на проде внезапно лег, а куда копать — непонятно. Знакомая ситуация? Запускать отладчик ой как страшно, но иногда это единственное решение. Как подготовиться и избежать фиаско? Несколько полезных советов дал ведущий инженер в платформе. А еще в нашей подборке — хардкор без хардкода на платформенном сервисе с CEL в конфиге и осознанный, но безболезненный переход на Ginko/Gomega для смелых Go-тестировщиков.

Читать далее

Netpoll: пишем сервера, которые не умирают от нагрузки

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

Вы знаете, что обычные сетевые библиотеки Go начинают «тяжело дышать», если их нагрузить десятками тысяч соединений? Неважно, делали вы HTTP API или свой TCP сервер — дефолтные инструменты вроде net всегда имеют свои лимиты. Тут-то хорош зайдет Netpoll — библиотека, которая позволяет серверам обрабатывать сотни тысяч соединений одновременно и при этом не терять в производительности.

Читать далее

«Напомните через месяц?»: как автоматизировать напоминания клиентам с Golang, SQLite и вебхуками

Уровень сложностиСредний
Время на прочтение5 мин
Количество просмотров1.6K

Привет, Хабр! Представим ситуацию: вы клиент. Разговор с менеджером завершен, он предложил вам что-то полезное — услугу, продукт или подписку — и, допустим, вы соглашаетесь: «Почему бы и нет, отличная идея». Менеджер записал ваше согласие и обещал напомнить вам через месяц. Звучит просто.

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

Читать далее

Создание XDP eBPF программы с использованием C и Golang: пошаговое руководство

Уровень сложностиСредний
Время на прочтение17 мин
Количество просмотров3.7K

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

В этом пошаговом руководстве мы рассмотрим процесс создания XDP eBPF программы с использованием языков C и Golang.

Читать далее

Functional options in Go

Время на прочтение8 мин
Количество просмотров3K

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

Читать далее

Использование Redis в Go

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

Redis — хранилище из семейства нереляционных (NoSQL) баз данных. Redis является очень быстрым хранилищем данных благодаря своей архитектуре in-memory. Он идеально подходит для задач, требующих быстрого доступа к данным, таких как кэширование, очереди сообщений, сессионная информация и многое другое. Go также известен своей высокой производительностью за счет компиляции в машинный код и эффективного управления памятью.

Читать далее

Middleware на уровне сетевого стэка в Go

Уровень сложностиСредний
Время на прочтение8 мин
Количество просмотров5.4K

Привет, любители Go! Сегодня мы рассмотрим, как создать middleware на уровне сетевого стэка в Go. Middleware позволяет добавлять полезные функции к HTTP-запросам и ответам: логирование, аутентификация, обработка ошибок и многое другое.

Читать далее

Создание кастомного балансировщика нагрузки на Go для gRPC с приоритизацией адресов

Время на прочтение7 мин
Количество просмотров7.4K

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

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

Читать далее

Проверка готовности приложения к работе в реальном ненадежном мире. Часть 5

Время на прочтение4 мин
Количество просмотров1.6K

Пятая и заключительная часть статьи, в которой Виталий Лихачёв, SRE в booking.com и спикер курса Слёрма «Golang-разработчик» рассказывает, о чём стоит подумать перед выкаткой сервиса в жестокий прод, где он может не справиться с нагрузкой или деградировать из-за резких всплесков при наплыве пользователей и по вечерам.

Статья состоит из 5 частей, которые выходят по очереди:

1. Надежность.

2. Масштабируемость/отказоустойчивость.

3. Resiliency/отказоустойчивость.

4. Безопасность. Процесс разработки. Процесс выкатки.

5. Наблюдаемость. Архитектура. Антипаттерны.

Читать далее

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

Внутренности планировщика Go

Уровень сложностиСложный
Время на прочтение5 мин
Количество просмотров6.4K

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

Почему данный код всегда будет выводить одинаковый результат?

Читать далее

Запуск узла Hidden Lake на языке Go

Уровень сложностиСложный
Время на прочтение7 мин
Количество просмотров2.3K

Анонимная сеть Hidden Lake является в своей области уникальным и достаточно своеобразным проектом, т.к. базируется на совершенно иных методах и подходах анонимизации трафика, чем большинство ныне нам известных сетей. Из-за того, что сеть является относительно новой - она часто дополняется и совершенствуется. Одним из таковых дополнений стал новый способ запуска узла HL.

Читать далее

Проверка готовности приложения к работе в реальном ненадежном мире. Часть 4

Время на прочтение10 мин
Количество просмотров2K

Четвертая часть статьи, в которой Виталий Лихачёв, SRE в booking.com и спикер курса Слёрма «Golang-разработчик» рассказывает, о чём стоит подумать перед выкаткой сервиса в жестокий прод, где он может не справиться с нагрузкой или деградировать из-за резких всплесков при наплыве пользователей и по вечерам.

Статья состоит из 5 частей, которые выходят по очереди:

1. Надежность.

2. Масштабируемость/отказоустойчивость.

3. Resiliency/отказоустойчивость.

4. Безопасность. Процесс разработки. Процесс выкатки.

5. Наблюдаемость. Архитектура. Антипаттерны.

Читать далее

Проверка готовности приложения к работе в реальном ненадежном мире. Часть 3

Время на прочтение18 мин
Количество просмотров1.7K

Третья часть статьи, в которой Виталий Лихачёв, SRE в booking.com и спикер курса Слёрма «Golang-разработчик» рассказывает, о чём стоит подумать перед выкаткой сервиса в жестокий прод, где он может не справиться с нагрузкой или деградировать из-за резких всплесков при наплыве пользователей и по вечерам.

Статья состоит из 5 частей, которые выходят по очереди:

1. Надежность.

2. Масштабируемость/отказоустойчивость.

3. Resiliency/отказоустойчивость.

4. Безопасность. Процесс разработки. Процесс выкатки.

5. Наблюдаемость. Архитектура. Антипаттерны.

Читать далее

Паттерн Наблюдатель в Golang на котиках

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

Привет, Хабр! Сегодня будем разбирать паттерн Наблюдатель на примере наших любимых пушистиков — котиков. Ведь кто, как не коты, могут быть идеальными субъектами и наблюдателями в нашем коде?

Читать далее

Проверка готовности приложения к работе в реальном ненадежном мире. Часть 2

Время на прочтение6 мин
Количество просмотров1.8K

Вторая часть статьи, в которой Виталий Лихачёв, SRE в booking.com и спикер курса Слёрма «Golang-разработчик» рассказывает, о чём стоит подумать перед выкаткой сервиса в жестокий прод, где он может не справиться с нагрузкой или деградировать из-за резких всплесков при наплыве пользователей и по вечерам.

Статья состоит из 5 частей, которые будут выходить по очереди:

1. Надежность.

2. Масштабируемость/отказоустойчивость.

3. Resiliency/отказоустойчивость.

4. Безопасность. Процесс разработки. Процесс выкатки.

5. Наблюдаемость. Архитектура. Антипаттерны.

Читать далее

Проверка готовности приложения к работе в реальном ненадежном мире. Часть 1

Время на прочтение6 мин
Количество просмотров4.3K

Опытом делится Виталий Лихачёв, SRE в booking.com и спикер курса Слёрма «Golang-разработчик». Он рассказывает, о чём стоит подумать перед выкаткой сервиса в жестокий прод, где он может не справиться с нагрузкой или деградировать из-за резких всплесков при наплыве пользователей и по вечерам.

Считайте это некоторым чек-листом, но не применяйте все пункты as is, потому что каждая система уникальна и иногда вполне допустимо построить менее надежную систему с целью значительного сокращения затрат на разработку, поддержку и эксплуатацию (например, отсутствие резервирования). Однако бэкапы обязательно должны быть 🙂

Некоторые термины не будем переводить не в силу лени автора, а в силу устойчивости терминов в литературе.

Отдельные пункты внимательный читатель может отнести сразу к нескольким разделам верхнего уровня. Поэтому деление на подгруппы довольно условное.

Если возникнет вопрос, а почему не описан некоторый X в чек-листе, то ответ простой: статья и так получилась огромной, и вы вероятно сможете найти что-то полезное для себя.

Статья состоит из 5 частей, которые будут выходить по очереди:

1. Надежность.

2. Масштабируемость/отказоустойчивость.

3. Resiliency/отказоустойчивость.

4. Безопасность. Процесс разработки. Процесс выкатки.

5. Наблюдаемость. Архитектура. Антипаттерны.

Читать далее

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