Category : golang

golang
Исправляем следующие 10 000 багов, связанных с наложением ссылок

Почему появляются баги? Существует много причин, но если мы взглянем на конкретные примеры, то сможем увидеть закономерности — и спроектировать наши системы так, чтобы избежать целых классов ошибок. Под катом автор блога Considerations on Codecrafting рассматривает ошибки, связанные с наложением ссылок, предлагает методы их предотвращения и призывает внедрить эти методы на уровне проектирования новых языков. 1. Мой первый ArrayListПредположим, вы снова первокурсник, изучаете структуры данных и …

  • пятница, 21 июня 2024 г. в 00:00:06
golang
Ускоряем sync.Map на 73% за 40 строк кода

Данный способ - это всего лишь спортивный эксперимент, накиданный под вечер на коленке с целью что-нибудь исследовать.Задача была написать аналог sync.Map максимально приближенный по производительности к оригиналу, спортивного интереса ради.Давайте сразу к коду и бенчмаркам:package main import ( "hash/fnv" "sync" ) type bucket struct { data sync.Map } type FastSyncMap struct { buckets []*bucket } func NewSyncMap(bucketCount int) *FastSyncMap { buckets := make([]*bucket,…

  • четверг, 20 июня 2024 г. в 00:00:11
golang
Почему люди злятся из-за итераторов в Go 1.23

Недавно я увидел сообщение, демонстрирующее будущий дизайн итераторов для Go 1.23 (август 2024 года). Насколько я могу судить, многим людям этот дизайн не нравится. Я хотел высказать свои мысли по этому поводу как разработчик языка.Предложения по итераторам можно найти здесь.В нем есть подробное описание дизайна, объясняющее, почему были выбраны те или иные подходы, поэтому я рекомендую прочитать его, если вы знакомы с Go.Вот один из примеров:func Backward[E any](s []E) func(func(int, E) bool) …

  • среда, 19 июня 2024 г. в 00:00:04
golang
Об одном использовании gRPC: HTTP-прокси pog-server

HTTP-прокси - это программа для для выполнения HTTP-запросов клиента с другого IP-адреса.gRPC - система передачи данных на HTTP/2-транспорте и в качестве языка интерфейсов использующая Protocol Buffers.Я разработал HTTP-прокси pog-server, выложил в Open Source и хочу поделиться историей разработки. Собственно байты переносятся посредством gRPC:пользователь <=> pog-client <=gRPC=> pog-server <=> конечный HTTP-сервер ЗачемВ наше время программисту приходится использовать прокси-…

  • вторник, 18 июня 2024 г. в 00:00:06
golang
Учимся работать с Kubernetes через запуск приложения

Всем привет! Меня зовут Павел Агалецкий, я ведущий разработчик юнита Platform as a Service в Авито. В этой статье мы научимся запускать и отлаживать приложения в Kubernetes и познакомимся с двумя инструментами: утилитой kubectl и консольным дашбордом k9s.Задача: запустить два приложения в KubernetesМы попытаемся запустить в Kubernetes два приложения, которые будут взаимодействовать друг с другом через вызовы API. Первое приложение — app1 — отвечает фразой Hello World  и текущим значением времен…

  • вторник, 18 июня 2024 г. в 00:00:05
golang
Краткий навигатор по собеседованию Senior PHP/GO Backend

Ищете работу backend разработчика и хотите быть на высоте на собеседовании? Подготовка к вопросам для backend разработчика на PHP и Go может оказаться непростой задачей. В этой статье мы разберем некоторые вопросы для Senior Backend разработчика, которые помогут вам пройти собеседование и произвести впечатление на потенциального работодателя.Почему Важно Готовиться к Вопросам для Backend Разработчика?Собеседование для backend разработчика включает в себя проверку технических знаний, навыков реш…

  • суббота, 15 июня 2024 г. в 00:00:09
golang
Потрясающе быстрые теневые стеки для Go

Разберемся, как теневые стеки(shadow stacks) могут ускорить раскрутку указателя фрейма (frame pointer unwinding) и другие подходы к захвату стека вызовов в 8 раз.Программные теневые стеки могут обеспечить до 8 раз более быструю трассировку стека в Go рантайме по сравнению с раскруткой указателя фрейма, которое было реализовано в go1.21. Это не означает, что данная идея должна сразу же вырваться из лаборатории, но она предлагает интересный взгляд на потенциальное будущее трассировки стека с аппа…

  • пятница, 14 июня 2024 г. в 00:00:08
golang
Вызов функций Go из Python с помощью ctypes

Привет, Хабр!В этой статье поговорим о том, как можно запускать программу, написанную на Go из Python. Зачем? При работе на Python иногда имеет смысл реализовать отдельные функции на статичном, высокопроизводительном языке. Go может стать отличным выбором для этого, потому что он быстрый, простой и кроссплатформенный. Недавно в моем Python канале, мы обсуждали, как это сделать, в результате родилась эта статья.Для реализации всех шагов нам потребуется: Python, компилятор Go и GCC (MinGW для Win…

  • четверг, 13 июня 2024 г. в 00:00:05
golang
Кот меняющий строки

Вне всякого сомнения самое сложное в программировании это именование переменных и что-то там про кеш. Самое сложное в написании статьи это написать введение. Попытка бросить в читателя кусок случайного кода не работает, такую статью никто не читает. Штош, я постараюсь быть более увлекательным.Это экспериментальная заметка. Я буду признателен за любой фидбек.Стараюсь как могу не сильно глубоко уходить в детали и не распыляться по многим темам одновременно, чтобы сохранить некоторую целостность в…

  • среда, 12 июня 2024 г. в 00:00:08