Как стать автором
Обновить
82.75
Рейтинг

Go *

Компилируемый, многопоточный язык программирования

Сначала показывать
  • Новые
  • Лучшие
Порог рейтинга
  • Все
  • ≥0
  • ≥10
  • ≥25
  • ≥50
  • ≥100

Exec-пробы: история про эксперимент и свежие грабли

Блог компании Netcracker Программирование *Go *DevOps *Kubernetes *

Мы активно деплоим свои приложения в Kubernetes и используем HTTP-пробы для сервисов. Однако решили провести эксперимент с exec-пробами и… положили на лопатки кластер! Как так? Ведь именно exec пробы первыми описываются во всех руководствах и книгах по Kubernetes, включая официальные! Что же не так?

Вот вам свежая информация о граблях, которая может вас уберечь от потенциальных проблем и необдуманных решений. А в конце статьи – что же не так с HTTP-пробами и зачем мы вообще экспериментировали с exec-ом.

Так где подвох? →
Всего голосов 9: ↑8 и ↓1 +7
Просмотры 1.9K
Комментарии 8

Кодогенерация в GO на примере маршалинга и анмаршалинга интерфейсных типов данных

Программирование *Go *

Есть интерфейс и есть несколько типов удовлетворяющих этому интерфейсу. Хочется сделать так, что бы можно было сохранить в JSON список таких интерфейсов а потом восстановить из JSON-а этот список.

Давайте прикинем как это сделать на Go
Всего голосов 6: ↑5 и ↓1 +4
Просмотры 1.9K
Комментарии 2

Первый стабильный выпуск низкоуровневого корректора раскладок в linux «xswitcher»

*nix *Go *Софт

Спустя год разработки удалось(у меня нашлась пара недель) довести до рабочего состояния задуманное в предыдущей публикации. А спустя ещё пару месяцев я пишу наконец эту статью.

В общем, ура! "Мы строили-строили и наконец построили". И оно даже работает/переключает. Причём, и в gnome3 тоже (не без помощи костыля).

Но, обо всём — по порядку.
Всего голосов 25: ↑24 и ↓1 +23
Просмотры 5K
Комментарии 13

Применение двоичной логики в недвоичных операциях: оптимизируем производительность и ресурсы

Блог компании Ozon Tech Высокая производительность *Программирование *Алгоритмы *Go *

Давайте поговорим о побитовых операциях.

С ними привычно иметь дело embedded-разработчикам и тем, кто занимается криптографией. Также побитовые операции можно встретить в системном программировании, компьютерной графике и везде, где присутствует сильная ограниченность ресурсов или длительные вычисления.

В прикладном же программировании многие устанавливают (|) и проверяют параметры (&) через степени двойки. Как правило, дальше этого не заходит. Но всегда есть задачи, которые потребуют горизонтального масштабирования при высокой нагрузке в случае их решения явным или привычным способом.

Попробуем применить побитовые операции к прикладной задаче для оптимизации кода в плане производительности и используемых ресурсов – и посмотрим, что из этого получится.

Читать далее
Всего голосов 20: ↑17 и ↓3 +14
Просмотры 2.8K
Комментарии 26

RUI – библиотека для создания web-приложений на языке go

Go *

Хочу представить вам свой проект – библиотеку RUI (Remote User Interface). Библиотека предназначена для создания web-приложений на языке go. 

Особенностью библиотеки заключается в том, что вся обработка данных осуществляется на сервере, а браузер используется как тонкий клиент. Для связи клиента и сервера используется WebSocket. Для разработки вам не нужны HTML/CSS/JavaScript. Все разрабатывается на языке go.

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

Библиотека бесплатна и распространяется под MIT лицензией. В данный момент библиотека находится в статусе беты.

Если вас это заинтересовало, то прошу в статью.

Читать далее
Всего голосов 9: ↑7 и ↓2 +5
Просмотры 2.2K
Комментарии 9

Релиз Centrifugo v3 – и да пребудет с вами Центробежная Сила

Высокая производительность *Разработка веб-сайтов *Open source *Разработка мобильных приложений *Go *
Перевод

Спустя почти три года после релиза Centrifugo v2 мы рады анонсировать следующий мажорный релиз Centrifugo. В течение последних нескольких месяцев, глубоко в нашей Centrifugal лаборатории, мы синтезировали улучшенную версию сервера.

Напоминаем, что Centrifugo – это сервер сообщений в реальном времени (real-time). Сервер держит постоянные соединения от пользователей приложения и предоставляет API для моментальной рассылки какого-либо уведомления активным пользователям, подписанным на канал уведомления. Можно использовать для создания чатов, "живых" комментариев, multiplayer игр, стримить данные и метрики (например, быстро меняющиеся курсы валют).

Новая Центрифуга v3 нацелена упростить использование сервера в простых real-time приложениях. Улучшена производительность сервера, существующие фичи обросли новой функциональностью. Centrifugo v3 поддерживает однонаправленные (unidirectional) real-time транспорты, клиентский JSON протокол значительно ускорен. Появилась экспериментальная поддержка высокопроизводительного движка на основе Tarantool. Помимо HTTP теперь есть возможность проксировать клиентские события используя GRPC протокол. Добавлены новые методы и поля серверного API, а также анонсирована PRO версия сервера, нацеленная на бизнес-пользователей.

Читать далее
Всего голосов 11: ↑10 и ↓1 +9
Просмотры 1.9K
Комментарии 9

Сборка собственного RPM-пакета, содержащего простую Go-программу

Блог компании RUVDS.com Программирование *Go *
Перевод
Процесс развёртывания программ обычно состоит из множества этапов. Некоторые из этих этапов могут представлять собой довольно-таки сложные последовательности действий. В наши дни имеется широкое разнообразие инструментов, позволяющих создавать описания процессов развёртывания программ, которые можно воспроизводить на разных системах.

А именно, в мире Linux уже довольно давно существуют менеджеры пакетов. Например — это RPM и YUM. Они упрощают установку, обновление и удаление программ в Linux-системах. Собственно говоря, в этой статье я хочу рассказать о том, как создать собственный простой RPM-пакет, хочу показать, что это совсем несложно.



Надо отметить, что во многих организациях менеджеры пакетов используются лишь для установки программ, предлагаемых разработчиком используемого этими организациями дистрибутива Linux. Для управления развёртываниями собственных программ менеджеры пакетов не применяются. Тому, кто попытается собрать свой первый RPM-пакет, может показаться, что это не так уж и просто. Но обычно тот, кто учится создавать такие пакеты, тратит время с пользой. Дело в том, что соответствующие знания способны помочь ему в деле оптимизации его рабочих процессов. Здесь мы рассмотрим процесс создания RPM-пакета, содержащего простую программу, написанную на Go.
Читать дальше →
Всего голосов 36: ↑35 и ↓1 +34
Просмотры 5.2K
Комментарии 2

Прагматичные Unit тесты на Golang

Тестирование IT-систем *Программирование *Go *Тестирование веб-сервисов *
Из песочницы

Обычный пятничный вечер. Ты уже расслабился, попивая кружечку чая или чего покрепче... Но тут, как назло, бомбит личку в телеге твой надоедливый коллега DevOps со скринами ошибок твоего кривого коммита на серваке. Спустя четно потраченные нервы и логирование всего и вся, все же удалось найти ту самую строчку кода, что так мешала всем жить. Не хотелось бы попадать часто в такие ситуации, да и обременять последующее поколение на те же муки.

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

Читать далее
Всего голосов 18: ↑15 и ↓3 +12
Просмотры 3.1K
Комментарии 3

Функциональные  опции в Go: реализация шаблона опций в Golang

Go *
Перевод
Tutorial

В этом посте рассказывается о том, какие функциональные опции есть в Go и как мы можем использовать шаблон "опции" для их реализации. Функциональные опции имеют форму дополнительных аргументов функции, которые расширяют или изменяют ее поведение. Вот пример, в котором используются функциональные параметры для создания новой структуры House:

Читать далее
Всего голосов 3: ↑2 и ↓1 +1
Просмотры 1.7K
Комментарии 4

Эволюция Docker. Часть 2.3

Программирование *Виртуализация *Go *DevOps *История IT

Данная статья является четвертой в цикле (1, 2, 3), посвященном изучению исходного кода Docker и прямым продолжением предыдущей статьи, которую мне пришлось преждевременно завершить в виду зависания редактора хабра. В этой статье мы закончим изучать код первого публичного релиза Docker v0.1.0. Будут рассмотрены оставшиеся команды по управлению контейнерами, сетевой стек, а также создание образа и запуск контейнера.

Читать далее
Всего голосов 4: ↑2 и ↓2 0
Просмотры 2.1K
Комментарии 2

История платформы Highload.Fun для соревнований в оптимизации кода

Высокая производительность *Ненормальное программирование *C++ *Go *Rust *

Привет Хабр! Сегодня я хочу рассказать о платформе, где люди соревнуются в том, кто больше сможет сэкономить тактов CPU для решения задач. Её история началась весной 2021 года, после очередного HighLoad Cup'а от Mail.ru. Мне очень нравится этот конкурс, но, к сожалению, он проходит довольно редко (2017, 2018, 2021 года) и наблюдается тренд ухода от оптимизации на уровне операционной системы и железа к массовости, чтобы в лидерах были решения не только на C/C++, но и на более медленных языках программирования. В 2017 году нужно было сделать HTTP сервер, реализующий простую бизнес логику, лидеры писали свои решения с использованием низкоуровневых вызовов функций ядра и только вызов функции epoll_wait со временем ожидания -1, вместо 0, не позволило мне подняться в TOP-6 с 9 места. Если интересны технические детали, то можно почитать эту статью. В 2021 году нужно было обращаться к серверу, в котором были искусственные ограничения и нужно было разобраться в них, а не выжать из железа всё возможное. После конкурса был созвон, на котором участники давали обратную связь, по итогам которого стало понятно, что есть небольшое количество людей, которым интересна именно низкоуровневая оптимизация, а не только улучшение алгоритмов на уровне Big O. Так и родилась идея этой платформы. Под катом история и устройство платформы, а также набитые шишки.

Читать далее
Всего голосов 5: ↑5 и ↓0 +5
Просмотры 1.5K
Комментарии 2

Как работать с Tarantool на Golang вместо Lua

Блог компании Mail.ru Group Python *NoSQL *Go *Tarantool *


Ядро Tarantool-а написано на C, а вся бизнес-логика создаётся на Lua. Это не самый сложный язык, но и не самый популярный. Поэтому сегодня я расскажу, как начать работать с Tarantool, написав всего три строчки кода на Lua. А всё остальное приложение написано на Golang. Чтобы было еще интереснее, я даю альтернативный вариант на Python. Что за проект? Делаем приложение, которое позволяет ставить метки на карте: дом, работа, первое свидание, первый Hello World, первый "too long wal write" Tarantool.


Поехали!

Читать дальше →
Всего голосов 27: ↑25 и ↓2 +23
Просмотры 4.7K
Комментарии 8

Эволюция Docker. Часть 2.2

Программирование *Виртуализация *Go *DevOps *История IT

Данная статья является третьей в цикле (1,2), посвященном изучению исходного кода Docker и прямым продолжением предыдущей статьи, в которой мы начали разбирать код первого публичного релиза Docker v0.1.0. В этой части будет рассмотрена реализация практически всех команд, а в конце, мы создадим образ и запустим докер контейнер на его основе. Для удобства я постарался разбить список команд на условные группы: работа с образами, работа с контейнерами, сетевой стек и т.д. 

А теперь, как говорится, “without further ado”, приступим к изучению кода из файла commands.go начиная с команд для управления образами (images).

Читать далее
Всего голосов 6: ↑5 и ↓1 +4
Просмотры 2.1K
Комментарии 0

Go: стоит ли использовать указатели вместо копий структуры?

Блог компании OTUS Программирование *Go *
Перевод

Систематическое использование указателей для передачи структур вместо их копирования для многих разработчиков Go кажется лучшим вариантом с точки зрения производительности.

Чтобы понять влияние использования указателя, как альтернативы передачи копии структуры, мы рассмотрим два юзкейса.

Читать далее
Всего голосов 13: ↑7 и ↓6 +1
Просмотры 3.5K
Комментарии 10

Эволюция Docker. Часть 2.1

Программирование *Виртуализация *Go *DevOps *История IT

Данная статья является второй, в цикле по истории развития и изучению исходного кода Docker. В ней мы разберем, что представлял собой первый публичный релиз от 23 марта 2013 года. 

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

Некоторые части кода уже были разобраны в первой статье, так что для полноты восприятия, рекомендую начать с нее, а также пятиминутной презентации The Future of Linux Containers, на которой и была представлена первая версия Docker.

Читать далее
Всего голосов 10: ↑8 и ↓2 +6
Просмотры 4K
Комментарии 0

Я сделал StackOverflow из IT-чатов Telegram

Мессенджеры *Go *
Из песочницы

Всем привет. Я бэкенд разработчик, и по роду деятельности активно использую разные чаты в Телеге – по Go, Кубернетес, базам данных. Задаю свои вопросы, иногда отвечаю на чужие.

Идея Q&A из Телеги показалась очень интересной, и социально полезной. Обидно что такая кладезь знаний пропадает в недрах неиндексируемых телеграм-чатов. Ведь когда я был начинающим разрабом, общение с коммьюнити позволило мне быстро бустануть скиллы. Пришло время отдавать должок.

Читать далее
Всего голосов 46: ↑43 и ↓3 +40
Просмотры 14K
Комментарии 28

Как в восемь раз уменьшить количество DNS-запросов в Go

Блог компании Ozon Tech Высокая производительность *DNS *Go *Микросервисы *

Привет, Хабр. Меня зовут Рустам. Я работаю в Ozon: админю Kubernetes и пишу на Go.

У нас очень много сервисов на Go — их количество исчисляется тысячами. Запускаются они внутри кластеров Kubernetes. А я плотно работаю с Kubernetes и заметил, что при запуске кода внутри Kubernetes для резолва одного адреса делается до десяти DNS-запросов. Это, конечно, влияет на производительность.

Я решил разобраться, как Go делает DNS-запросы. В результате мне удалось уменьшить их количество в наших проектах до одного-двух. Как у меня это получилось и можно ли использовать мой опыт в вашем проекте, я расскажу в статье.

Узнать больше про Go+DNS
Всего голосов 90: ↑71 и ↓19 +52
Просмотры 7.2K
Комментарии 6

Go: объектный файл и релокация

Блог компании OTUS Программирование *Go *
Перевод

Эта статья оперирует версией Go 1.14.

Релокация — это этап процесса линковки, в рамках которого каждому внешнему символу присваиваются соответствующие адреса. Поскольку пакеты компилируются отдельно, они не имеют понятия, где функции или переменные из других пакетов находятся фактически. Начнем с тривиального примера, когда нам потребуется релокация.

Читать далее
Всего голосов 8: ↑7 и ↓1 +6
Просмотры 2.3K
Комментарии 0

Как сделать alter table в высоконагруженной таблице

Блог компании Karuna PostgreSQL *Программирование *Go *Микросервисы *

Ещё лет 5 назад на собеседованиях с backend-разработчиками был популярен вопрос: как переименовать колонку в высоконагруженной таблице (возможны вариации: как сделать любой другой alter table)?

Вопрос всё ещё часто звучит на собесах. И актуальность его выросла, так как за последние 5 лет стало намного больше масштабных проектов с высокой нагрузкой.

Читать далее
Всего голосов 27: ↑25 и ↓2 +23
Просмотры 10K
Комментарии 29

Вклад авторов