Рубрика «Go»

Если JS/TS это гибкий асинхронный клей для веба на одном потоке, то Go это строгий инструмент для облака с честным параллелизмом.

Главная проблема новичка сейчас это старые учебники. Классический «Effective Go» писали в 2009-м, там нет ни модулей, ни дженериков. Учить по нему Go всё равно что учить JS по учебникам времен ES3.

Здесь не будет истории. Это гайд по современному Go (1.25+), который использует твой опыт в JS/TS, чтобы ты начал писать рабочий код, а не копался в легаси.

Главные отличия парадигм: Что вам нужно забыть

Ассемблер не так страшен, как его малюют

Ассемблер не так страшен, как его малюют

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

Когда нужен Го-ассемблер

Читать полностью »

Давайте рассмотрим как управляют памятью два популярных языка программирования - Rust и Go.

Когда запускается программа, создается процесс с собственным адресным пространством и потоками, выполняющимися на ядрах. Процессор работает с виртуальной памятью - абстракцией, которой управляет операционная система.
Например в Go, когда мы создаем массив:

arr := make([]byte, 100)

Рантайм запрашивает диапазон виртуальных адресов, но физическая память выделяется не сразу, а при первом обращении к данным:

first := arr[0]

Запрашивая первый элемент происходит page faultЧитать полностью »

Меня зовут Миша, я бэкенд‑разработчик в платформе Яндекс Еды, и сейчас я покажу немного настоящего кода процессинга заказа.

e, err := w.prepareExecutor(ctx, req)
if err != nil {
    return nil, err
}

if err := e.CreateAndPay(); err != nil {
    return e.HandleResult(err)
}

if err := e.InitializeNativeDelivery(); err != nil {
    return e.HandleResult(err)
}

if err := e.WaitForOrderConfirmation(); err != nil {
    return e.HandleResult(err)
}

if err := e.WaitDelivery(); err != nil {
    return e.HandleResult(err)
}

return e.HandleResult(nil)

Читать полностью »

Компилятор Go хорошо и быстро кросс-компилирует

Компилятор Go хорошо и быстро кросс-компилирует

Читать полностью »

Привет! В данной статье хотел бы раскрыть тему - почему на 'младших' стендах api работает стабильно, но в проде начинаются проблемы: рост памяти, кол-во горутин множится, и через несколько часов - просадка производительности, gc не справляется, out of memory killer и т. д.

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

Что внутри

Разобьем на несколько частей, в 1-ой части:

JSON, YAML, TOML, HCL - за последние годы человечество успело изобрести десяток языков для конфигурации.

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

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

Пора перестать с этим мириться и сделать конфигурации наконец человеческими.

🛑 Перестаньте

  • утомлять глаза, пытаясь разобраться в тонне бесполезных кавычек

  • утомлять глаза, пытаясь распознать в каком месте есть проблема с отступом

  • Читать полностью »

Введение

Первый Docker-образ для моего Go-приложения весил 1.92 GB. Для микросервиса на 100 строк — абсурдно. Решил разобраться, куда именно уходит место и как добиться максимально лёгкого образа.

За несколько итераций оптимизации удалось уменьшить образ в 91 раз — до 21 MB production вариант. С дополнительным UPX-сжатием в 213 раз — до 9 MB.

В статье

  • Максимальная оптимизация Docker-образа для Go

  • Выбор базового образа и техник для каждого сценария

Создал простенький мониторинг микросервис

Функционал:

Этот суслик — Гофер, эмблема Го. Ни одно реальное животное не пострадало!

Этот суслик — Гофер, эмблема Го. Ни одно реальное животное не пострадало!

Введение

Читать полностью »

Оно работает!

Оно работает!

Читать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js