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

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

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


В Go мапа использует флаги и метаданные, чтобы отслеживать, из какого бакета (старого или нового) нужно читать данные во время процесса эвакуации (rehashing). Это позволяет мапе корректно работать даже в переходный период, когда часть элементов уже перемещена в новые бакеты, а часть еще осталась в старых....

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


Эвакуация данных (evacuation) в мапах Go — это процесс перераспределения элементов мапы при её расширении (rehashing). Этот механизм позволяет мапе динамически увеличивать количество бакетов и поддерживать высокую производительность операций (вставка, поиск, удаление). ...

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


В Go мапа (map) — это встроенный тип данных, который реализован как хэш-таблица. Она позволяет хранить пары "ключ-значение" и обеспечивает быстрый доступ к данным по ключу. Давайте кратко разберем её устройство....

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


Контекст (context) в Go — это механизм для управления жизненным циклом операций, таких как запросы в веб-приложениях, горутины или длительные вычисления. Он позволяет передавать данные, отменять операции и устанавливать временные ограничения (deadlines). Контекст широко используется в Go для управления параллельными задачами и обработки запросов....

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


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

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


В Go (Golang) context.WithValue используется для передачи данных, специфичных для конкретного запроса, через цепочку вызовов функций. Это может быть полезно в различных сценариях, например, для передачи идентификаторов запросов, информации о пользователе, тайм-аутов или других метаданных, которые должны быть доступны в разных частях программы....

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


В Go (и в многопоточном программировании в целом) data race и race condition — это два разных, но связанных понятия, которые относятся к проблемам, возникающим при работе с concurrent (параллельным) кодом. Они часто упоминаются вместе, но это не одно и то же. Давайте разберемся, в чем их отличие....

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


В Go (Golang) интерфейс (interface) — это тип, который представляет собой набор методов. Интерфейс считается равным nil, если и его тип, и значение равны nil. Однако, из-за особенностей реализации интерфейсов в Go, это может привести к неочевидным ситуациям. Давайте разберемся, когда интерфейс равен nil, и как избежать распространенных ошибок....

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


В Go (Golang) можно реализовать пул воркеров (worker pool) для выполнения задач в параллельных горутинах. Пул воркеров позволяет ограничить количество одновременно выполняемых задач, что полезно для управления нагрузкой и ресурсами....

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


oneof в Protobuf позволяет включать несколько типов данных в одно поле, но в один момент времени будет иметь значение только один из этих типов. Это полезно, когда нужно моделировать поле, которое может принимать разные типы данных, но не одновременно....

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


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

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


В Kafka при использовании потребителя нужно явно помечать сообщения как обработанные (committed). Это называется фиксацией смещения (offset commit). В контексте пакетной обработки сообщений это можно делать одним из двух способов:...

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


Библиотека migrate (из пакета github.com/golang-migrate/migrate) поддерживает ClickHouse как источник данных для миграций. Чтобы использовать migrate.New или другие методы для миграции в ClickHouse, параметры подключения задаются через строку DSN....

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


Вот пример на Go с использованием библиотеки Sarama, где происходит вычитывание большого количества записей (например, 10,000), их обработка и ручной коммит оффсетов после успешной обработки....

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