Как стать автором
Поиск
Написать публикацию
Обновить
180.84

Go *

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

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

Валидация данных в Go с go-playground/validator: полное руководство

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

Валидация входных данных — критически важная часть любого приложения. Без неё ваше приложение подвержено:

— паникам и ошибкам из-за неожиданных nil или невалидных значений,
— некорректной работе бизнес-логики при обработке невалидных данных,
— уязвимостям безопасности (SQL-инъекции, XSS и др.),
— сложностям в отладке из-за непредсказуемого поведения.

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

Читать далее

Новости

Как добавить GigaChat в проект за 3 шага. Гайд и опенсорс-инструмент

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

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

В последнее время все больше разработчиков экспериментируют с большими языковыми моделями. GigaChat от Сбера — одна из самых доступных и мощных моделей на российском рынке. У нее есть подробное REST API, которое позволяет интегрировать нейросеть в любой продукт: от телеграм-ботов до сложных корпоративных систем.

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

Я столкнулся с этими задачами и, чтобы упростить жизнь себе и другим Go-разработчикам, написал gigago — легковесный и идиоматичный SDK. Его цель — взять на себя всю "грязную работу" и позволить вам добавить GigaChat в проект буквально за несколько минут.

Читать далее

Приложение на Go шаг за шагом. Часть 3: форматирование и обёртывание ответов JSON

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

Привет! Я Владислав Попов, автор курса «Go-разработчик с нуля» в Яндекс Практикуме. В серии статей я хочу помочь начинающим разработчикам упорядочить знания и написать приложение на Go с нуля: мы вместе пройдём каждый шаг и создадим API для получения информации о книгах и управления ими. 

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

Читать далее

Каналы(channels) в Go

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

Каналы — инструмент для передачи данных между горутинами. Это фундаментальная концепция, на которой строится вся модель параллелизма в языке, и одна из ключевых особенностей, которая делает Go уникальным среди современных языков программирования. За внешней простотой синтаксиса ch <- value и <-ch скрывается сложная реализация, которая включает в себя кольцевые буферы, системы очередей, механизмы блокировки и тесную интеграцию с планировщиком горутин. В этой статье разберем их внутреннее устройство на уровне runtime и рассмотрим паттерны использования.

Читать далее

Алгоритмы для работы с большими данными в Go: HyperLogLog и Count-Min Sketch

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

Алгоритмы для работы с большими данными

Всем привет! Для начала давайте разберем что такое вообще Алгоритмы для работы с большими данными, основная суть алгоритмов для работы с большими данными  — это эффективная обработка огромных объёмов информации при минимальных вычислительных ресурсах (памяти, CPU, диске). Их суть — жертвовать точностью ради скорости и масштабируемости.

Читать далее

Большой разбор Строк Go → «Типы и структуры данных Go»

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

Меня зовут Рома и это вторая часть цикла «Типы и структуры данных Go». В этот раз будем разбираться с внутренностями строк. Говорить будем только о том, что есть в базе языка, то есть без дополнительных функций из стандартной, экспериментальной или какой-либо другой библиотеки.

Приятного аппетита!

Строчить далее

BASS: CI, воспроизводимые сборки и пакетный менеджер

Уровень сложностиСредний
Время на прочтение16 мин
Количество просмотров687
Представьте, что вам надо поднять какую-нибудь continuous integration систему. Распространённые решения (BuildBot, Jenkins, TravisCI, ...) — относительно монструозные сложные системы, заточенные под запуск недоверенного кода в изолированном окружении. Зайти на slave и поотлаживать скрипт запуска — не дадут. Кроме того, даже те же современные версии BuildBot интерфейса уже являются web-приложением, а не HTML страницами, что серьёзное неудобство.

А можно что-нибудь попроще и полегче? И чтобы было кроссплатформенным: GNU/Linux далеко не единственная платформа на которой, к сожалению, приходится проверять работоспособность различного софта.

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

Скрэмбл для тех, кто ненавидит SQL в Go коде

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

Обращения к базе — одно из самых популярных действий бэкенд приложений, и чаще всего оно происходит с помощью SQL запросов. И есть несколько способов хранить запросы в коде: строка или константа непосредственно в качестве аргумента функции, билдер запросов или отдельно лежащий файл с SQL запросом, который эмбедится в Go код в момент сборки. Этот последний способ чаще всего можно найти по запросу типа «Golang embed SQL» и он действительно довольно хорош.

Читать далее

Гайд на полиморфизм. Что там под капотом?

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

В прошлой статье мы рассмотрели теоретическую основу такого понятия как полиморфизм. Теперь же перейдем к рассмотрению что там «под капотом».

Читать далее

Как хранить деньги в базах данных и почему это не так просто, как кажется

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

Хранение денежных сумм в базах данных и API: анализ подходов платежных систем

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

Разбираем, как решают эти проблемы Stripe, PayPal, Google Wallet и другие платежные системы. Сравниваем три основных подхода: Integer minor units, Decimal base units и String base units.

Читать далее

FastCGo: как мы ускорили вызов C-кода в Go в 16,5 раза

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

В Deckhouse Prom++ мы переписали ядро хранения и обработки горячих данных на C++, при этом вся оркестрация и периферия остались в Prometheus на Go, что позволило сохранить полную совместимость с Prometheus. Для частых вызовов кода C++ мы использовали механизм CGo, однако первые тесты показали, что производительность CPU практически не улучшилась из-за его медлительности. В итоге мы переписали CGo, создав собственный механизм вызова.

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

Читать далее

KEKS кодек и криптографические сообщения

Уровень сложностиСредний
Время на прочтение30 мин
Количество просмотров702
Данная статья напоминает о проблемах X.509 PKI и реализаций ASN.1. Предлагает компактный, быстрый, детерминированный, потоковый и простой формат кодирования данных KEKS, а также криптографические сообщения для подписи и шифрования данных с поддержкой пост-квантовых алгоритмов.

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

Эволюция JSON в Go: от v1 к v2

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

Вторая версия пакета json, которая появится в Go 1.25 (август 2025) — большое обновление с множеством несовместимых изменений. В v2 добавили новые возможности, исправили ошибки в API и поведении, а также улучшили производительность. Давайте посмотрим, что изменилось!

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

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

Разбираемся в сборщике мусора Go: просто и с гофером

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

Разбираемся в сборщике мусора Go: просто и с гофером

Я решил написать эту статью в первую очередь для себя, потому что перечитал кучу материалов про сборщик мусора (GC) в Go, и почти все они были слишком сложными. Моя цель — объяснить, как работает GC, что такое инкрементальность и барьер записи, так, чтобы я сам понял и запомнил и, возможно, стал полезным для других. А чтобы было веселее, я добавил гофера — маскота Go — в забавных иллюстрациях, которые помогут визуализировать идеи. Если вы, как и я, хотите разобраться в GC без лишней головной боли, эта статья для вас!

Читать далее

Ускоряем валидацию UTF-8 в 10 раз (>10 ГБ/с): реализация алгоритма Lemire-Keiser на Go с ARM NEON

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

UTF-8 валидация — одна из базовых операций при работе с текстом, которая выполняется миллионы раз в секунду в современных приложениях. Стандартная реализация в Go, хоть и корректная, далека от оптимальной по производительности. В этой статье расскажу, как мне удалось ускорить валидацию UTF-8 в 10 раз, используя SIMD‑инструкции ARM NEON и алгоритм из статьи «Validating UTF-8 In Less Than One Instruction Per Byte» Джона Кейзера и Дэниела Лемира.

Читать далее

Жонглирование памятью: арены в Golang

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

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

Читать далее

Большой разбор Слайсов Go -> «Типы и структуры данных Go»

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

Представляю вам первую статью из цикла «Типы и структуры данных Go»! Здесь мы познакомимся со cлайсами, разберем внутреннюю реализацию этого типа и его вспомогательных функций. Говорить будем только о том, что есть в базе языка, то есть без дополнительных функций из стандартной, экспериментальной или какой-либо другой библиотеки.

Приятного аппетита!

Слайсить далее

Условная буферизация логов в Go

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

Условная буферизация логов в Go: как сократить расходы на логирование на 95% без потери контекста ошибок.

[ПРОБЛЕМА]
1M запросов → 10M логов → 💸

[РЕШЕНИЕ]
Буфер → Анализ → Решение

Сохранить только нужные

[РЕЗУЛЬТАТ]
95% экономии + полный контекст ошибок

Читать далее

Практический гайд по авторизации и аутентификации в микросервисах с Ory и Apache APISIX

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

Мне кажется, что уже есть сотни разных статей на эту тему, но каждый раз мне чего-то не хватало. Поэтому я решил написать свою статью, в которой покажу, как я реализую авторизацию и аутентификацию в своих проектах. Это именно гайд: вы можете взять готовый код и адаптировать его под свои нужды. В рамках статьи будут использоваться Ory Hydra и Ory Kratos, Apache APISIX в качестве API Gateway и несколько микросервисов на Golang. Всё это будет работать в Docker, чтобы вы могли легко запустить и поиграться.

Читать далее

Каскадная отмена контекстов в Go: от исходного кода до производственных паттернов

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

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

Читать далее
1
23 ...

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