Category : golang

golang
Обработка ошибок в Go — Не традиционный подход

Обработка ошибок — это важная часть любого языка программирования. Она помогает предотвратить незаметные сбои в приложениях, перехватывать неожиданные поведения и предоставлять осмысленные ответы, когда что-то идет не так. Однако подход Go к обработке ошибок часто приводит к написанию многословного и повторяющегося кода, что вызывает недовольство среди разработчиков. Давайте разберем, почему это происходит, какие ограничения это накладывает и какие решения могут быть предложены.Проблема: Избыто…

  • понедельник, 10 февраля 2025 г. в 00:00:05
golang
Долой оверхед: как мы избавились от зависимостей в интеграционном тестировании микросервисов

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

  • суббота, 8 февраля 2025 г. в 00:00:08
golang
FissionGo: как запускать Go-функции в Kubernetes

Привет, Хабр!Сегодня будем разбираться с FissionGo — фреймворком, который обещает избавить нас от работы с деплоями, контейнерами и YAML‑манифестами.Допустим, нам нужно запустить функцию — небольшой кусок кода, который что‑то делает (парсит JSON, отвечает на запрос, обрабатывает webhook). План работы был бы примерно таким:Написать кодЗапихнуть его в контейнерНаписать манифестыНастроить сервисыОбъяснить Kubernetes, как всем этим управлятьНадеяться, что всё не упадёт в продеА Fission убирает пунк…

  • суббота, 8 февраля 2025 г. в 00:00:07
golang
Алгоритм Кнута-Морриса-Пратта для поиска подстрок на Go

Поиск подстроки в строке — важная задачка в текстовой обработке. В Go стандартная библиотека имеет strings.Index, но он использует простой перебор символов, который работает с O(n × m) в худшем случае, где n — длина текста, m — длина подстроки.Алгоритм Кнута-Морриса-Пратта решает эту проблему, используя префикс-функцию, которая позволяет пропускать заведомо ненужные сравнения. В результате его сложность O(n + m), что делает его подходящим для больших текстов и множественных поисковых запросов.К…

  • пятница, 7 февраля 2025 г. в 00:00:17
golang
Как запустить публичный сайт на телефоне или экономим на спичках

Сейчас вас научу "плохому" — будем поднимать наше веб-приложение на телефоне и прикрутим к нему публичный домен, что бы все могли пользоваться нашим классным сервисом. Для этой цели я накидал приложение на go, которое определяет IP адрес, вычисляет город, отправляет запрос во внешний сервис и отдает страницу с данными о погоде в вашей локации. Я не стал упарываться - он просто нужен для демонстрации. https://github.com/itcaat/what-is-the-weather-now. Также там есть кеширование погоды и…

  • пятница, 7 февраля 2025 г. в 00:00:15
golang
Гармония железа и кода: ускоряем Go, проектируя приложение с учетом архитектуры процессора

Представьте, что ваш код работает на 30% быстрее, при этом вы почти его не меняли. Звучит как магия — на самом деле нет, если учитывать архитектуру процессора при проектировании приложения и структур данных. Привет! Я Александр Шакмаев — технический лидер в Cloud.ru. В статье предлагаю разобраться, как небольшие изменения, основанные на знании архитектуры процессора, могут привести к значительному ускорению Go. Готовы раскрыть потенциал вашего кода? Тогда переходите под кат.Сразу начну с пример…

  • пятница, 7 февраля 2025 г. в 00:00:13
golang
Суть Go: Time

Статья о параллелизме Go, где с помощью интерактивных примеров раскрываем тему с нуля.В этой главе мы рассмотрим методы управления временем в параллельных программах.УдушениеПредположим, у нас есть куча задач. func work() { // Something very important, but not very fast. time.Sleep(100 * time.Millisecond) }Самый простой способ — это обрабатывать последовательно:func main() { start := time.Now() work() work() work() work() fmt.Println("4 calls took", tim…

  • четверг, 6 февраля 2025 г. в 00:00:08
golang
Сравнение кода от DeepSeek и ChatGPT по-гоферски

В поисках утреннего чтива на Хабре наткнулся на статью про сравнение кода на Swift, сгенерированного двумя действующими лицами - ChatGPT от OpenAI и его нашумевший "убийца" - DeepSeek, основателем которого выступает Лян Вэньфэн, про которого можно узнать в статье на VC. После прочтения статьи в голову вполне ожидаемо пришла идея сравнения сгенерированного кода на Go. Правила те же самые - использование одинаковых промптов для каждой модели. Если модель выдает неработоспособный результат…

  • понедельник, 3 февраля 2025 г. в 00:00:14
golang
Сравнение кода DeepSeek и ChatGPT(Golang)

Весь этот шум заставил меня заинтресоваться DeepSeek. Самое банальное сравнить с ChatGPT. Ну и плюсом, у меня сегодня выходной, можно и поиграть немного. Код пусть будет на Go. Модели GPT-o1 и Deepseek-R1. Заданием для нейронок будет написать две игры. Эти две игры это вообще первое что я когда либо написал в своей жизни, правда, это было не на Go. Задание 1: Игра "Пинг-Понг" на GoПромт:Напиши с нуля консольное приложение на Go. В приложении должна быть реализована игра "Пинг-Понг&…

  • понедельник, 3 февраля 2025 г. в 00:00:13