IT заметки по программированию
IT заметки по программированию
IT заметки по программированию
IT заметки по программированию

TraceQL — это язык запросов, используемый в Grafana Tempo для фильтрации и анализа трассировок. Он позволяет выбирать трейсы и их части (спаны) на основе заданных условий. Ниже приводится описание синтаксиса TraceQL, ключевых элементов языка и примеры использования....

продолжить чтение


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

продолжить чтение


Для работы с ClickHouse в Go можно использовать официальную библиотеку ClickHouse Go. Этот драйвер позволяет напрямую взаимодействовать с ClickHouse через протокол TCP. Вот базовый пример, который демонстрирует, как можно подключиться к ClickHouse, выполнять запросы и обрабатывать результаты....

продолжить чтение


Если база данных ClickHouse ещё не существует и вы хотите создать её в миграции, есть несколько способов корректно настроить процесс с использованием библиотеки migrate. Проблема в том, что migrate.New ожидает, что база данных, указанная в строке подключения, уже существует....

продолжить чтение


Starvation (голодание) горутин в Go возникает, когда одна или несколько горутин не могут получить доступ к ресурсам или выполнить свою работу из-за того, что другие горутины постоянно monopolize (монополизируют) эти ресурсы. Это может привести к тому, что "голодающие" горутины будут indefinitely (бесконечно) ожидать своей очереди на выполнение....

продолжить чтение


В Protobuf (в .proto файле) можно задать ошибку как часть возвращаемого сообщения. В контексте Go-приложений, обработка ошибок и возврат их через gRPC-методы часто оформляется с использованием поля типа Status или собственного сообщения для ошибок....

продолжить чтение


.proto файлы используются в Protocol Buffers (Protobuf) для определения структуры данных и сервисов в платформо-независимом формате. Они содержат контракт взаимодействия между системами и позволяют автоматически генерировать код для сериализации/десериализации данных, а также для работы с RPC-сервисами....

продолжить чтение


В Go для работы с PostgreSQL можно использовать два популярных подхода для управления соединениями с базой данных: sql.DB и pgxpool.Pool. Оба подхода предлагают пул соединений, но есть несколько отличий между ними, которые могут повлиять на выбор в зависимости от конкретных требований проекта....

продолжить чтение


В OpenTelemetry Go, когда вы создаете новый спан, его родительский идентификатор указывается автоматически через контекст (context.Context). Таким образом, если вы хотите задать родительский идентификатор для нового спана, вам нужно передать контекст, содержащий уже существующий спан, в качестве родителя....

продолжить чтение


В OpenTelemetry Go не нужно создавать новый экземпляр трассировщика для каждого трейса. Обычно, один и тот же трассировщик (tracer) используется для создания нескольких спанов (spans) в рамках одной трассировки (trace)....

продолжить чтение


otel.SetTracerProvider() устанавливает глобальный провайдер трассировки, который становится доступным во всей программе. Это означает, что после вызова этой функции любой пакет или часть кода, использующая OpenTelemetry SDK, сможет получить доступ к этому провайдеру и создавать трейсы и спаны, не создавая отдельный провайдер в каждом пакете....

продолжить чтение


sync.Cond в Go — это примитив синхронизации, который позволяет горутинам ожидать или сигнализировать о наступлении определенного события. Он полезен в ситуациях, когда одна или несколько горутин должны ждать, пока другая горутина не выполнит какое-то условие или не изменит состояние....

продолжить чтение


Go понимает, где заканчивается каждая руна в строке, благодаря тому, что строки в Go представляют собой последовательности байт в кодировке UTF-8. UTF-8 — это переменная длина кодировки, где каждому символу (или кодовой точке Unicode) может соответствовать от 1 до 4 байтов....

продолжить чтение


В Go руны (rune) — это тип данных, представляющий символ Unicode. По сути, rune — это псевдоним для типа int32, который используется специально для работы с символами Unicode. Давайте разберемся подробнее, что это такое и как с этим работать....

продолжить чтение


DTO (Data Transfer Object) действительно по своей сути является простым и плоским объектом, предназначенным для передачи данных между слоями приложения. Его основная цель — перенос данных, а не реализация поведения или бизнес-логики. Однако в практике программирования DTO может включать методы, если они соответствуют следующим условиям:...

продолжить чтение