Обновить
184.3

Go *

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

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

База по шардированию базы

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

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

Мы на пальцах рассмотрим что такое шардирование, как оно помогает в масштабировании и даже рассмотрим тот самый этап «роста».

Читать далее

The Best Golang framework: no framework?

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

Вольный перевод статьи на ресурсе threedots.tech от Robert Laszczak - главного инженера в SlashID, сооснователя Three Dots Labs и создателя популярной Golang-библиотеки Watermill.

На протяжении некоторого времени я занимался руководством группы Go-разработчиков и одним из самых распространенных вопросов от начинающих специалистов был - "Какой фреймворк мне следует использовать?".

Читать далее

Проблема grpc-gateway и как ее можно решить

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

Модификация кода сгенерированного с помощью grpc-gateway для возможности использования middleware.

Читать далее

Hashmap(map) по версии Golang вместе с реализацией на дженериках

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

Привет. Сегодня рассмотрим такую интересную структуру данных как hashmap, а именно ее реализацию в Go. Вкратце разберем что такое hashmap, как это выглядит под капотом Go 1.19. Посмотрим отличия реализации с Java и Python. Реализуем hashmap из под капота с помощью дженериков.

Читать далее

Библиотека алгоритмов на графах на языке Go. Часть 1

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

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

Читать далее

Приглашаем на Ozon Tech Community Go Meetup

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

UPD: приложили записи докладов и слайды


Всем салют!

Давно не виделись. Я Леонид Могучев, тимлид группы тарификации Ozon.

Go is love, Go is life. Go — целевая платформа разработки, используемая в Ozon Tech. На Go у нас написано более 1000 микросервисов, обеспечивающих работу сайта, склада, систем логистики. 

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

А вот и тот анонс поближе, который просили в комментариях. Ждём всех в гости на открытый Ozon Tech Community Go Meetup 9 декабря в 18:00 в Москве.

Читать далее

Golang-дайджест № 23 (1 – 30 ноября  2022)

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

Свежая подборка новостей и материалов

Интересное в этом выпуске

Руководство по стилю Go Style, выпущен Goland 2022.3, видео с конференции GopherCon 2022

Читать далее

Gitea + Drone + Nginx + Portainer. Пошаговое руководство по деплою аналога github на своём железе

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

В данном туториале я расскажу вам как можно задеплоить gitea на своём железе с использованием docker-compose подключить drone, для возможности автоматизации тестирования и доставки собственных приложений, настроить reverse-proxy через nginx для доступа через сеть и включить portainer для мониторинга запущенных контейнеров.

Читать далее

Улучшенный benchstat для оптимизирующих гоферов

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

Привет!


Если вы писали бенчмарки и пытались понять, что там ускорилось и на сколько, то наверняка вы пользовались утилитами вроде benchstat.


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


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

Парсинг XML в Golang

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

Актуальность XML в 2022 году была бы под вопросом, но все еще остается много legacy систем, которые могут предоставлять данные в этом формате, поэтому нам приходится с ним работать. XML популярен в travel индустрии. Например, GDS (международные системы бронирования, более подробно можно почитать в википедии) или информационная система Darwin ассоциации железнодорожных транспортных компаний Великобритании активно используют его. Поэтому, я надеюсь, что эта статья будет кому-то полезна. В ней рассмотрена пара подходов к парсингу xml в Golang: обычный и потоковый, пользовательский парсинг поля и работа с различными кодировками. Мы будем использовать пакет encoding/xml из стандартной библиотеки. Если вы уже работали c encoding/json, то будет много похожего, но некоторые различия все же есть.

Читать далее

Введение в DDD: когда микросервисов на Go недостаточно

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

Микросервисная архитектура помогает строить гибкие и масштабируемые приложения. Однако в случае бессистемного использования этого подхода вы довольно быстро столкнётесь с разочарованием и неконтролируемыми сложностями. Избежать проблем помогает Domain-Driven Design (DDD) — предметно-ориентированное проектирование. В статье расскажем о принципах его работы, а также разберём основы стратегических паттернов в Golang. 

Читать далее

Domain Fronting. версия 1.3

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

В данной статье представляется новый взгляд на старую и знакомую заядлым пентестерам тему как DomainFronting. Тем более, что после недавних нововведений в протокол TLS v1.3 от компании Cloudflare эта избитая тема заиграла новыми красками.

Читать далее

VK Cup: место встречи чемпионов

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

Привет, Хабр! Я к вам с хорошими новостями: 28 ноября стартовала регистрация на чемпионат VK Cup! В этом году он посвящён только разработке (но не расстраивайтесь — дизайнерский трек мы перенесли в программу чемпионата VK Design Cup).

Классическое олимпиадное программирование пройдёт на площадке Codeforces — регистрируйтесь. К остальным трекам – мобильной разработке, машинному обучению и разработке на Go и JavaScript можно присоединиться на платформе All Cups.

Все полезные подробности о чемпионате — уже восьмом — читайте под катом.

Читать далее

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

Пишем анонимный мессенджер с нуля

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

Приключение на 20 минут.

Читать далее

Рассматриваем под лупой отладчик Delve для Go-разработчиков

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

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

Сегодня есть множество IDE, поддерживающих работу с Go и позволяющих отлаживать приложения. На текущий момент для Go представлены два отладчика: GDB (но он не поддерживает многие фичи языка, например Go-рутины) и Delve. Многие IDE используют последний как дефолтный отладчик. И в этой статье я расскажу о возможностях Delve: о том, что умеет сам отладчик, а не что нам предоставляет IDE.

Читать далее

Полезные ресурсы для погружения в Go: выбор сотрудников Selectel

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

Попросили коллег порекомендовать ресурсы — подкасты, ютуб-каналы, книги, блоги и GitHub-репозитории — для изучения языка программирования Go. Сохраняйте подборку в закладки: пригодится и начинающим, и опытным специалистам. А также делитесь своими вариантами в комментариях.
Читать дальше →

Как сделать трек на ИТ-конференции в меняющихся условиях и при этом не упустить работу: опыт организатора

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

В октябре этого года состоялся очередной DevFest Omsk 2022 — конференция «от программистов для программистов». Он впервые прошёл в онлайн-формате, а backend-разработчик red_mad_robot Илья Горкун организовал на нём первый трек по Golang. О том, как ему это удалось, с какими сложностями пришлось столкнуться и на что стоит обратить внимание, если вы тоже планируете делать конференции, — читайте в материале Ильи.

Читать далее

Децентрализируй это. Создание сетей хранения без единого центра на Go

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

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

Решением этой проблемы могло стать использование сетей, основанных на прямом обмене трафиком (peer-to-peer или p2p), но создание полностью децентрализованной сети представляет значительную сложность, поэтому во многих случаях все же оставляют некоторые общие реестры, хранящие информацию об узлах-носителях определенного содержания (так, например, работают торрент-трекеры) и на которых регистрируются клиенты сети при подключении. Основным недостатком такого псевдодентрализованного подхода является возможность относительно простой остановки функционирования сети через блокировку соответствующих трекеров. Альтернативой могут быть полностью децентрализованные сети и мы рассмотрим в этой статье основные подходы к их реализации на примере свободного протокола и сети Peernet.

Читать далее

Как я организовал автоматический деплой для своих пет-проектов

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

Всем привет) Это мой первый пост на Хабре, и сегодня я расскажу про небольшой pet project (git-trigger), который я недавно написал для сборки своих проектов на сервере. На данный момент я использую его в нескольких своих проектах для автоматической сборки и пока не было замечено никаких косяков.

Читать далее

Как сделать программу на Go быстрее на 42%, изменив один символ

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

Если вы прочитали заголовок и подумали «ну, ты, наверно, сделал сначала что-то глупое», то вы правы! Но что такое программирование, как не упражнения в глупых ошибках? Поиск глупых ошибок — это и есть самое большое удовольствие!

Также стоит заранее сделать оговорку о бенчмаркинге: ускорение на 42% было замерено при выполнении программы с моими данными и на моём компьютере, поэтому относитесь к этому результату с долей скепсиса.

Что делает программа?


codeowners — это программа на Go, выводящая владельцев каждого из файлов в репозитории согласно набору правил, указанному в файле GitHub CODEOWNERS. Правило может гласить, что всеми файлами с расширением .go владеет команда @gophers, или что всеми файлами в папке docs/ владеет команда @docs.
Читать дальше →

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