Рубрика «Go» - 7

Привет. Расскажу, как написал self-hosted аналог ngrok на Go. 10 часов чистого времени, один человек + Claude Code.

Написал свой ngrok за 10 часов (Antigravity + Claude Code) - 1

Проблема

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

Как это началось

Случилось так, что мне пришлось участвовать в разработке на Go. До этого с Go я был знаком шапочно, большую часть времени работая с Rust. Изучить Go оказалось не сложно, но после того, как мы приступили к разработке, обнаружились неприятные моменты. Выяснилось, что по сравнению с Rust, в Go местами не хватает гибкости языка, местами есть способы выстрелить себе в ногу.

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

Go-ассемблер поддерживает разные платформы

Go-ассемблер поддерживает разные платформы

Ранее в сериале:

Стек

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

Сталкивались ли вы с болью при управлении порядком запуска и остановки зависимостей в вашем Go-сервисе?

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

Примерный сценарий жизненного цикла сервиса выглядит так:

При запускеЧитать полностью »

Нет кода быстрее, чем код написанный на ассемблере

Нет кода быстрее, чем код написанный на ассемблере

В этой части (первая тут) мы поговорим о структуре 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 хорошо и быстро кросс-компилирует

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


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