Pull to refresh
Современные технологии — сфера многообразная. Многие темы в ней бесконечно далеки друг от друга. Невозможно быть экспертом сразу во всех из них, но можно — в какой-то одной. Именно статьи таких экспертов — подробные, сложные, узконаправленные; словом, лучшие — мы собрали для хабравчан в этой коллекции. Выбранные материалы отвечают на все вопросы по своей теме. Показывают, как лучше всего изложить свои знания, если вы профи. И подсказывают, из каких ещё источников читателю получить знания.
Посмотреть коллекцию
Total votes 39: ↑35 and ↓4+31
Comments1

И еще один сервис проверки паспортов или опять вопрос сколько гигабайт в одном мегабайте

Reading time10 min
Views5.1K

Какое-то время назад появилась возможность уделить внимание языку Go и удачно на глаза попалась публикация «Паспортный контроль, или Как сжать полтора гигабайта до 42 мегабайт» . В статье кратко, но информативно, рассказывается о тестовой задаче по разработке сервиса проверки номеров российских паспортов на предмет наличия их в списке недействительных паспортов.  Среди основных требований к реализации – это скорость проверки и доступность сервиса.  

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

Кроме того, в упомянутой выше статье затронуты вопросы эффективной, с точки зрения памяти, организации битовых массивов (bitmap). И эта тема достаточно актуальна и востребована в разных прикладных решениях, например, в виде bitmap-индексов для СУБД.

Итак, есть желание посмотреть на новый для себя язык Go, есть интересная проблематика в виде организации и использования bitmap, есть практическое применение, на котором эти две задачи можно отработать. 

Читать далее
Total votes 17: ↑15 and ↓2+13
Comments3

Golang+FFmpeg

Reading time2 min
Views12K

Долго искал более-менее живую Golang-библиотеку для работы с rtsp.

Изначально наткнулся на github.com/nareix/joy4, но там оказался устаревший C-код и rtp был на Golang, а декодинг на FFmpeg. (немало deprecated варнингов).

Изначально форкнул ее, что-то поправил, но с китайскими камерами (о чем, много уже, написано на хабре), часто были битые кадры, отвалы коннекта и т.д.

Поискал по Go-go! telegram-чату - понял, что нет хороших решений.

Ну и как любят делать на JS - нужно написать свой фреймворк.

Читать далее
Total votes 4: ↑2 and ↓20
Comments7

Навык Алисы на serverless в Yandex.Cloud

Reading time15 min
Views8.9K

Сложно в одном тексте описать всё необходимое для разработки даже самого простого навыка для Алисы с одной стороны. А с другой стороны, показать разработку на serverless-стеке так, чтобы и новичку было не так сложно и заядлому девелоперу было не скучно. Но попробую осилить эту задачу, написав навык на Go. и будет у меня семейный список дел.  

Читать далее
Total votes 9: ↑8 and ↓1+7
Comments0

Telegram-клиент на Golang

Reading time3 min
Views12K

Работая разработчиком в одной веб-студии, пришел клиент с довольно интересной работкой, ему нужен был агрегатор постов из чужих телеграм каналов, так как стек в компании был PHP то решили писать на нем, а конкретно на библиотеке MadelineProto о которой уже есть статья от крутого парня (более подробно об этой либе можете почитать в его статье), вот и началось мучительно создание этого сервиса...

Madeline в общей массе свой очень хорошо, полностью асинхронный и имет под капотом кучу методов для работы как с ботами так и с клиентом, но есть у него одна маленькая проблема (а может и не одна ¯\_(ツ)_/¯) , встроенный EventHandler получает не все новые сообщения из постов (и да я понимаю что есть getHistory, но если бы мы брали сообщения через этот метод, все вышло бы очень медленно работающим и высоконагруженным) Долгие часы и даже дни поиска решения этой проблемы не привели к желаемому результату, все так же процент постов которые пропускались именно Madeline был слишком большим.

Ок, было принято волевое решение забить на данную библиотеку и попробовать найти что-то другое на известном нам стеке, взгляд упал на go-tdlib. Развернули либу и поехали пыхтеть в разработку, и о чудо все посты собираются и все стало чудесно, за исключением одного но... Данная библиотека от пользователя Arman92 сильно отстает от офф методов tdlib и имеет внутри несколько логических ошибок, в общем начали у нас сыпаться паники и другие неприятные вещи. Так как пути назад уже не было, перебрали мы всю либу и обновили методы а так же исправили ошибки и теперь все просто чудесно.

Читать далее
Total votes 5: ↑0 and ↓5-5
Comments3

Golang-дайджест № 7 (1 – 31 июля  2021)

Reading time3 min
Views4.9K

Интересное в этом выпуске

Выпущены версии Go 1.17rc1, 1.16.6 и 1.15.14, GitHub представил инструмент проверки безопасности GO, Перехватываем и изменяем сетевые пакеты на примере игры, Рекомендательная система

Приятного чтения!

Читать далее
Total votes 12: ↑10 and ↓2+8
Comments2

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

Reading time6 min
Views13K

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

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

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

Узнать больше про Go+DNS
Total votes 91: ↑71 and ↓20+51
Comments9

Анализ теста по Go с PHDays

Reading time4 min
Views3.5K

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

В конце мая прошла конференция PHDays, на которой был тест как раз с такими задачками. К моему сожалению, я провалила этот тест, но затем разобралась что, как и почему, и хочу поделиться с вами.

Итак, 5 картинок с кодом, к каждому дается 4 варианта ответа.

Читать далее
Total votes 10: ↑8 and ↓2+6
Comments7

Опыт применения GitHub Actions для создания CI/CD с бесплатным хостингом на Heroku

Reading time2 min
Views3.4K

В рамках изучения ЯП Golang я решил сделать учебный проект на примере telegram-бота. Для этой цели я взял популярный для создания ботов API

Написав реализацию нужной мне бизнес-логики, у меня возник вопрос: А как же мне его по-быстром собрать и бесплатно развернуть?

Несколько лет назад у меня был опыт создания утилиты на Go, предназначенной для работы в качестве вспомогательного docker контейнера в AWS ECS. И тогда мне понравилась идея, собрать докер из scratch образа без каких-либо базовых образов. Но использовать сервисы AWS для своего pet-проекта я не стал из-за дополнительных хлопот с настройками доступа и ключами безопасности. Я решил попробовать появившуюся не так давно CI/CD автоматизацию github.com/actions

Немного изучив предоставляемые CD автоматизации с хостингом, наиболее немногословным мне показалась автоматизация развертывания на heroku. И хотя опыта с ним я раньше не имел, мне хватило пары минут, чтобы зарегистрировать аккаунт на HEROKU и найти нужный для экшена heroku_api_key

Получился достаточно немногословный конфигурационный файл, бОльшая часть которого была автоматически сгенерирована GitHub Actions

Читать далее
Total votes 1: ↑0 and ↓1-1
Comments0

Register-based calling convention, GO?

Reading time10 min
Views6.6K

Пока GO-сообщество томится в ожидании версии 1.18 и обещанных в ней дженериков язык продолжает развиваться и в других направлениях. В вышедшей недавно версии 1.17 хватает интересных нововведений. Среди них есть одно, давно ожидаемое, изменение — новый calling convention. Что же это такое, в чем отличие от старого соглашения о вызовах, какое влияние будет оказано на прикладную GO разработку? Постараемся разобраться в этой статье.
image

Читать дальше →
Total votes 20: ↑19 and ↓1+18
Comments5

GoLand 2021.2: Улучшенная поддержка Go-модулей, новые возможности запуска gofmt, поддержка Go 1.17

Reading time9 min
Views6.7K

Привет, Хабр! 

Вышел GoLand 2021.2 — второй релиз этого года. Сегодня расскажем, что нового в этом релизе, и покажем, как пользоваться новой функциональностью. 

Читать далее
Total votes 10: ↑9 and ↓1+8
Comments12

Go Code Generation from OpenAPI spec

Reading time4 min
Views11K

OpenAPI specification


One of the nicest features of Go is the power of code generation. go generate command serves as a Swish knife allowing you to generate enums, mocks and stubs. In this article, we will employ this feature to generate a Go code from OpenAPI specification. OpenAPI specification is a modern industrial standard for REST API. This standard has fantastic tooling support and allows you to conveniently render and validate the spec. We are going to befriend the power of Go code generation with the elegance and clarity of the OpenAPI specification. In this way, you don't have to manually update the Go boilerplate code after every change in the spec. You also ensure that your docs and your code are a single entity, as your code is being begotten from the docs.


Let's start dead-simple: we have a service that accepts order requests. Let's declare endpoint order/10045234 that accepts PUT requests, where 10045234 is an ID of a particular order. We expect to receive an order as a JSON payload in the following format.


    {"item":  "Tea Table Green", "price":  106}

How can describe this endpoint in the OpenAPI spec?

Read more →
Total votes 3: ↑3 and ↓0+3
Comments0

Go: как программа восстанавливается после паники?

Reading time3 min
Views6.2K

Паники (Panic) в Go запускаются, когда программа не может должным образом обработать ошибку, например, происходит недопустимый доступ к памяти. Они также могут быть инициированы разработчиком, если ошибка является неожиданной и нет другого способа справиться с ней. Понимание процесса восстановления или прекращения работы в такой ситуации может быть весьма полезно для понимания последствий запаниковавшей программы.

Читать далее
Total votes 6: ↑4 and ↓2+2
Comments0

Установка Golang в WSL (WSL 2) с помощью Visual Studio Code

Reading time2 min
Views10K

Здравствуйте! В статье представленна инструкция по установке языка программирования Golang в подсистему Linux на Windows 10 (11). Если у вас уже установлен WSL2 и Visual Studio Code, то смело переходи на 3 часть этой статьи, для всех других же...

Читать далее
Total votes 11: ↑1 and ↓10-9
Comments9

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

Reading time4 min
Views18K

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

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

Читать далее
Total votes 46: ↑43 and ↓3+40
Comments35

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

Reading time4 min
Views9.6K

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

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

Читать далее
Total votes 13: ↑7 and ↓6+1
Comments10

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

Reading time7 min
Views2.6K

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

Читать далее
Total votes 5: ↑5 and ↓0+5
Comments7

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

Reading time4 min
Views6K

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

Читать далее
Total votes 3: ↑2 and ↓1+1
Comments4

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

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

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



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