Pull to refresh
1
0
Send message

Баги, которые мы пишем, ищем и исправляем #2

Level of difficultyMedium
Reading time7 min
Views856

Привет! Меня зовут Денис, я — разработчик ПО SEDMAX. Это промышленное ПО для сбора и визуализации данных в энергетике. Как и у всех, у нас бывают баги. Мне бы хотелось поделиться опытом в поиске таких багов, а также порассуждать на тему того, что необходимо было сделать, чтобы баг не появился. У нас серверная часть написана на go в виде некоторого множества сервисов, поэтому специфика большинства багов будет асинхронное взаимодействие, а код примеров представлен на go.

В прошлой статье были сделаны следующие выводы:

Читать далее
Total votes 1: ↑1 and ↓0+3
Comments0

Выжимаем из Go максимум производительности

Level of difficultyMedium
Reading time11 min
Views18K

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

Меня зовут Никита Галушко. Я старший программист-разработчик в отделе высоконагруженных систем и оптимизации ВКонтакте. В статье поделюсь, какие хитрости помогут использовать Go на полную мощность.

Читать далее
Total votes 76: ↑74 and ↓2+87
Comments40

От Firebase к Self-Hosted

Level of difficultyMedium
Reading time9 min
Views4.6K

Приложению cara.app пришёл счет от Vercel на 96280$. Многие стартапы начинают с Vercel и Firebase, затем из нежелания платить гуглу уходят на свои сервера

Поговорим с нюансами про стэк технологий и оценим усилия на миграцию на свои сервера. Разберём на примере Go с k8s и инфраструктурой мониторинга, но без Firebase (Github)

Читать далее
Total votes 8: ↑8 and ↓0+10
Comments4

Как и зачем создавать кастомные сборщики мусора в Go

Reading time8 min
Views3.9K

В Golang (да в принципе во всех ЯП) управление памятью и эффективное использование ресурсов — основа создания высокопроизводительных приложений. Одним из важных инструментов, который помогает справляться с этой задачей, является сборщик мусора (на англ garbage collection). Встроенный сборщик мусора Go выполняет свою работу довольно хорошо, но иногда требуется более тонкая настройка, чтобы соответствовать специальным требованиям потребностям конкретного приложения.

Здесь нам и помогут кастомные сборщики мусора.

Читать далее
Total votes 10: ↑8 and ↓2+10
Comments6

MapReduce на Go: превратите ваши большие данные в понятную карту и удобный редьюс

Level of difficultyMedium
Reading time7 min
Views3K

Часто задается вопрос: как эффективно и быстро обработать огромные объемы информации? Ответом на этот вызов стала концепция MapReduce, разработанная в недрах Google.

MapReduce — это парадигма программирования, созданная для обработки и генерации больших объемов данных с использованием параллельных распределенных алгоритмов. Основная фича проста: сначала данные разбиваются на небольшие части (фаза Map), а затем результаты этих частей агрегируются в финальный результат (фаза Reduce).

Читать далее
Total votes 11: ↑9 and ↓2+12
Comments2

Докеризация сборки проекта на всех уровнях

Level of difficultyEasy
Reading time6 min
Views4.2K

Всем привет, на связи Вадим Макеров, бэкенд‑разработчик iSpring. Успешная воспроизводимая сборка проекта является критическим фактором в поддержке и развитии проекта. При большом количестве проектов и технологических стеков гарантировать воспроизводимость сборки — «собралось однажды, соберется всегда» — сложнее.

О том, как реализовать идемпотентность сборки, я рассказывал в рамках митапа в офисе iSpring в 2023 году. Эта статья — текстовая версия моего доклада.

Читать про контейнеризацию сборки
Total votes 8: ↑8 and ↓0+10
Comments7

Ошибки в языке Go — это большая ошибка

Reading time3 min
Views17K
// гофер пытается найти логику среди обработки ошибок
+-------+-------+-------+-------+-------+-------+
|       |  err  |       |  err  |       |  err  |
|  ,_,,,        |       |       |       |       |
| (◉ _ ◉)       |       |       |       |       |
|  /)  (\               |       |       |       |
|  ""  ""               |       |       |       |
+       +-------+       +-------+       +-------+
|       |  err          |  err  |       |  err  |
|       |               |       |       |       |
|       |               |       |       |       |
+-------+       +-------+       +-------+       +
|  err  |               |  err                  |
|       |               |                       |
|       |               |                       |
+       +-------+       +       +-------+       +
|       |  err  |               |  err  | logic |
|       |       |               |       |       |
|       |       |               |       |       |
+-------+-------+-------+-------+-------+-------+

Я пишу на Go несколько лет, в Каруне многие вещи сделаны на нём; язык мне нравится своей простотой, незамысловатой прямолинейностью и приличной эффективностью. На других языках я писать не хочу.


Но сорян, к бесконечным if err != nil я до конца привыкнуть так и не смог.


Да-да, я знаю все аргументы: явное лучше неявного, язык Go многословен, зато понятен, и всё такое. Но, блин, на мой взгляд Го-вэй Го-вэю рознь.

Читать дальше →
Total votes 45: ↑41 and ↓4+42
Comments94

Быстрый старт: Docker + SMTP + Java/Go

Level of difficultyEasy
Reading time3 min
Views5K

Не так давно у меня появилась необходимость на нескольких проектах сделать регистрацию с подтверждением email, так же хотелось минимизировать затраты и исключить лишние телодвижения, так сказать методом ctrl+c ctrl+v, без танцев с бубном. Так же нам не нужно принимать почту и прочее, просто отправка, не более

P.s. Для прожженных отцов разработки ничего нового тут не будет

Итак, поехали ;-)

Читать далее
Total votes 7: ↑2 and ↓5+1
Comments10

Создание Framework для Go: Вдохновение от Laravel

Level of difficultyEasy
Reading time2 min
Views4.6K

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

Читать далее
Total votes 8: ↑5 and ↓3+7
Comments15

Летнее чтение на английском: список книг по уровням и советы методистов

Level of difficultyEasy
Reading time4 min
Views37K

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

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

Читать далее
Total votes 23: ↑21 and ↓2+21
Comments24

Go + Minio: как написать простой сервер для взаимодействия с файлами

Level of difficultyMedium
Reading time26 min
Views6.1K

Добрейшего! Недавно мой друг решил хранить картинки продуктов на сервере, в отдельной папочке, выдав ей публичный доступ. Что ж, эту статью я пишу чтобы рассказать другу плюсы и минусы, а так же показать как можно делать иначе.

Если вы только изучаете go, начинаете писать сервера, то обязательно посмотрите эту статью - для бекендера уметь работать с s3 хранилищем так же важно, как и уметь работать с реляционной / нереляционной базой данных и с key-value базой - это основа основ.

Читать далее
Total votes 11: ↑1 and ↓10-9
Comments10

# Casbin — легко о сложном в авторизации

Level of difficultyMedium
Reading time9 min
Views1.9K

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

Casbin — это мощная и легко расширяемая библиотека для управления доступом, которая поддерживает различные модели контроля доступа. Вот несколько примеров:

Читать далее
Total votes 1: ↑1 and ↓0+3
Comments8

Микросервисы с Go-Micro на примере

Level of difficultyEasy
Reading time5 min
Views2.6K

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

Читать далее
Total votes 8: ↑6 and ↓2+6
Comments2

База по базам данных. Для всех интересующихся

Level of difficultyMedium
Reading time7 min
Views18K

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

Читать далее
Total votes 21: ↑6 and ↓15-5
Comments9

Go gamedev: низкоуровневое API рисования в Ebitengine

Level of difficultyMedium
Reading time9 min
Views2.4K

Я уже несколько лет использую игровой движок Ebitengine, но ранее у меня получалось обходиться лишь высокоуровневым способом отрисовки объектов — DrawImage.


Функция DrawTriangles казалась не очень понятной человеку, который привык к концепции "есть спрайт — можно рисовать".


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


Давайте разбираться, что это за треугольники и с чем их едят.


Читать дальше →
Total votes 10: ↑10 and ↓0+13
Comments4

Мем айсберг SQL: погружение в глубины баз данных

Level of difficultyMedium
Reading time53 min
Views16K

Мем айсберг SQL: погружение в глубины изучения баз данных

Мем айсберг SQL — это вирусное интернет-изображение, изображающее айсберг с несколькими слоями. Вершина айсберга содержит общеизвестные концепции и инструменты SQL, такие как операторы SELECT и JOIN. Однако по мере погружения под воду становятся видны более абсурдные и малоизвестные аспекты SQL.

Читать далее
Total votes 23: ↑21 and ↓2+23
Comments6

SOLID в Go и щепотка паттернов

Level of difficultyMedium
Reading time23 min
Views8.1K

SOLID-ная статья о принципах SOLID, которую вы можете предложить тем, кто хочет понять эти принципы в контексте языка Go. Или прочитать самостоятельно, если это интересно и вам.

И да, как сказал бы волк из небезызвестного мультика: «SOLID? Шо, опять?»

Читать далее
Total votes 24: ↑21 and ↓3+18
Comments9

Паттерны Go — Паттерн «Опции» — ключ к простому рефакторингу в будущем

Level of difficultyMedium
Reading time9 min
Views1.9K

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

Читать далее
Total votes 5: ↑3 and ↓2+1
Comments7

Golang: context изнутри

Level of difficultyMedium
Reading time14 min
Views3.7K

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

Читать далее
Total votes 10: ↑7 and ↓3+7
Comments3

Golang: bytes.Buffer изнутри

Level of difficultyMedium
Reading time16 min
Views3.6K

Работая с кодом на Go, любому специалисту приходилось сталкиваться со стандартным пакетом bytes . Внутри него лежит определение Buffer . Что же это такое?

Читать далее
Total votes 11: ↑8 and ↓3+10
Comments1
1
23 ...

Information

Rating
Does not participate
Registered
Activity