Как стать автором
Обновить
98.16

Go *

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

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

Миграции в YDB с помощью «goose»

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

Любой более или менее серьезный продакшен, работающий с базой данных, подразумевает процесс миграции - обновление структуры базы данных от одной версии до другой (обычно более новой) [источник].

Миграции в БД можно делать вручную или использовать для этого специальные утилиты (фреймворки). В данной статье речь идет об утилите goose. Это инструмент миграции схемы, который обеспечивает управление миграциями схемы в проекте. Начиная с версии v3.16.0 goose поддерживает YDB - распределенную open-source СУБД. В данной статье мы будем разбирать кейс применения миграций конкретно в YDB.

Читать далее
Всего голосов 12: ↑12 и ↓0+12
Комментарии1

Логирование в Golang

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

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

Как в Golang логирование поживает? Рассмотрим этот вопрос в статье.

Рассмотрим основные библиотеки и подходы.

Читать далее
Всего голосов 22: ↑14 и ↓8+6
Комментарии9

Дженерики в go

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

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

Дженерики (или generics) существуют во многих языках, таких как Java, C#, и Rust, но для Go это относительно новая фича, введенная в версии 1.18 в 2022 году.

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

Go представила предложение по введению дженериков, которое после долгих обсуждений и тестирований было реализовано в версии 1.18. Это был ответ на просьбу сообщества. + к карме

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

Читать далее
Всего голосов 20: ↑13 и ↓7+6
Комментарии12

Алгоритмы балансировки нагрузки на Go

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

Салют Хабр и с наступающим новым годом!

Каждое приложение стремится быть доступным 24/7, балансировка нагрузки становится настоящим мастхевом.

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

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

Читать далее
Всего голосов 2: ↑1 и ↓10
Комментарии0

Истории

Проектирование fault-tolerant систем на Go

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

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

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

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

Читать далее
Всего голосов 20: ↑16 и ↓4+12
Комментарии7

WebSocket в Go и причем тут горилла

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

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

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

Go с помощью своей простоты и поддержкой конкурентности становится хорошим кандидатом для работы с WebSocket.

Читать далее
Всего голосов 25: ↑17 и ↓8+9
Комментарии10

Toolchain в Go

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

Привет, коллеги! В Го toolchain (цепочка инструментов) это не просто buzzword, а реальная рабочая фича. Если вы провели немало времени, погружаясь в дебри кода и модулей, вы знаете, что каждая строчка и каждый пакет как и в любом япе имеют свое место и значение.

Цепочка инструментов или toolchain (тулчейн звучит покруче) используются для создания, тестирования, отладки и управления вашими Go-проектами.

Читать далее
Всего голосов 19: ↑12 и ↓7+5
Комментарии2

Создание эмулятора игр MS-DOS в Kubernetes

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

В этой статье мы разберёмся, как можно интегрировать JavaScript-библиотеку js-dos в собственное решение Kubernetes, что позволит нам предоставлять доступ к играм MS-DOS в виде сервисов Kubernetes и запускать их в браузере.

Кроме того, по ходу статьи я дам советы и рекомендации начального, продвинутого и высокого уровней по разработке собственных контроллеров Kubernetes при помощи Golang и Kubebuilder или Operator SDK.
Читать дальше →
Всего голосов 35: ↑34 и ↓1+33
Комментарии3

Event Sourcing и CQRS в Go

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

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

Сегодня мы поговорим о двух концепциях — Event Sourcing и CQRS, и их реализации на языке Go. Go предоставляет хорошие возможности для реализации этих паттернов благодаря своей производительности, простоте и поддержке конкурентности «из коробки».

Читать далее
Всего голосов 15: ↑12 и ↓3+9
Комментарии2

Управление зависимостями в Go

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


Одна из основных фич Go это система управления зависимостями. В начале своего пути Go полагался на GOPATH, что иногда вызывало сложности и ограничения для разработчиков. Однако с появлением Go Modules в Go версии 1.11, ситуация изменилась. Go Modules представили более гибкий инструмент для управления зависимостями, позволяя более эффективно управлять библиотеками и их версиями.

Go Modules был введен в Go с версии 1.11 как официальная система управления зависимостями. Она позволяет автоматически загружать зависимости, управлять версиями, и облегчает совместную работу.
Читать дальше →
Всего голосов 31: ↑29 и ↓2+27
Комментарии2

Автоматизация работы программиста golang

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

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

Читать далее
Всего голосов 3: ↑1 и ↓2-1
Комментарии0

Object-Relational Mapping (ORM) в Golang

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

Одна из самых важных задач ЯП`s это эффективное взаимодействие с базами данных и Go не исключение. В Go есть парадигма Object-Relational Mapping (ORM), позволяет работать с реляционными базами данных в терминах объектно-ориентированного программирования. Это очень сильно упрощает работу с базами данных, позволяя сосредоточиться на бизнес-логике приложения, а не на нюансах SQL-запросов.

GORM (Go Object-Relational Mapping) предоставляет удобный интерфейс для взаимодействия с различными базами данных, сохраняя при этом идиоматичность и фичу конкуретности в Go.

Читать далее
Всего голосов 15: ↑12 и ↓3+9
Комментарии14

Подборка: навыки и инструменты начинающего Go-разработчика

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

Привет! Меня зовут Александр Тетеркин, я Go-разработчик в VK. Раньше я писал на Python, потом перешел на Go — пишу на этом языке уже три года, а также являюсь наставником на курсе «Go-разработчик с нуля».

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

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

Читать далее
Всего голосов 15: ↑11 и ↓4+7
Комментарии0

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

В поиске оптимального подхода к миграциям в Go

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

Привет! Меня зовут Нина, и я Golang разработчик.

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

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

Читать далее
Всего голосов 18: ↑15 и ↓3+12
Комментарии6

Инструкция: как поднять GitLab CI/CD на GoLang-проекте

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

В продолжение к заметке Инструкция: как быстро настроить GitLab CI/CD на Flutter-проекте.

Больше спасибо автору, всё получилось относительно легко. Я усложнил задачу: поднял GitLab локально на Хакинтоше, прикрутил executor = "docker" вместо "shell". И началось веселье.

Читать далее
Всего голосов 6: ↑5 и ↓1+4
Комментарии3

Ory Kratos — коробочный SSO

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

Ory Kratos - современный cloud native сервер идентификации с поддержкой PassKeys, MFA, FIDO2, TOTP, WebAuthn, с возможностью управления профилями, схемами пользователей, входом через внешние сервисы, регистрацией, восстановлением аккаунта, с поддержкой passwordless входа. Написан на Go, headless, API-first.

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

Читать далее
Всего голосов 20: ↑20 и ↓0+20
Комментарии4

Своё кастомное межсервисное взаимодействие с блекджеком и gRPC

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

Привет, Хабр! Меня зовут Ильяс. Мы с командой делаем собственный Service Mesh в Ozon Tech, и в этой статье я расскажу, как можно за вечер реализовать свое супер кастомное межсервисное взаимодействие. К концу статьи мы с вами напишем современные алгоритмы балансировки, настроим канареечные деплои, а также узнаем, как реализовать кучу других супернеобычных механизмов межсервисного взаимодействия на основе, не поверите, библиотеки gRPC :D И да, мы с моей командой уже раскатили это на весь Ozon Tech, состоящий из более чем 4500 сервисов. Пристегнитесь — мы начинаем… :-)

Читать далее
Всего голосов 36: ↑35 и ↓1+34
Комментарии13

Как настроить gRPC на примере микросервисов на Ruby и Go

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

Поделимся личным опытом, как у нас получилось организовать взаимодействие микросервисов на Ruby и Go на основе gRPC. Мы расскажем:

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

Читать далее
Всего голосов 13: ↑10 и ↓3+7
Комментарии0

Python лёгкий. Go простой. Простой != лёгкий

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

Python и Go отличаются по свойствам, и поэтому могут дополнять друг друга.

Существует распространённое заблуждение, будто простой и лёгкий — это одно и то же. В конце концов, если некий инструмент легко использовать, то и его внутреннее устройство должно быть просто понять, разве не так? И обратное тоже верно, да? На самом деле, всё как раз наоборот. В то время, как по духу оба понятия указывают на одно и то же (итог со стороны кажется лёгким), на практике такая поверхностная лёгкость достигается огромной подкапотной сложностью.

Читать далее
Всего голосов 27: ↑20 и ↓7+13
Комментарии44

Безопасность web приложений с использованием Identity Provider

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

В современном цифровом мире, где взаимодействие с онлайн-ресурсами и web приложениями стало неотъемлемой частью нашей повседневной жизни, безопасность и управление личной идентификацией стали ключевыми аспектами. Именно в этом контексте становится крайне важным понятие “Identity Provider” или, сокращённо, IdP.

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

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

В этой статье мы рассмотрим более подробно, как происходит взаимодействие с Identity Provider, его преимущества и роль в обеспечении безопасности данных и доступа в цифровой эпохе.

Читать далее
Всего голосов 4: ↑2 и ↓20
Комментарии0