Все потоки
Поиск
Написать публикацию
Обновить
94.6

Go *

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

Сначала показывать
Порог рейтинга
Уровень сложности

Как построить WaitGroup на основе 32-разрядного целого числа

Время на прочтение7 мин
Количество просмотров2.8K
image

В Go есть приятная утилита для синхронизации, именуемая WaitGroup, которую могут ожидать одна или несколько горутин. Это требуется для конкурентного завершения задач. В других языках обычно действует следующее соглашение по завершению задач: нужно объединять потоки, выполняющие работу. В Go горутины не имеют ни значений, ни дескрипторов, поэтому WaitGroup применяется вместо объединений. Собирание WaitGroup на основе типичных портируемых примитивов – путаное дело, в которое вовлечены конструкторы и деструкторы; также в процессе этой работы приходится управлять временами жизни. Однако, как минимум, под Linux и под Windows, можно построить WaitGroup из целого числа (инициализируемого в значении), во многом как при создании 32-разрядной очереди и 32-разрядного барьера.
Читать дальше →

Умный дом на минималках

Время на прочтение10 мин
Количество просмотров21K

В последнее время я всё чаще задумывался на тему реализации простых сценариев умного дома. Хотелось сделать просто, без голосового управления, минимальными вложениями для начала. Мои мечты почти разбились о суровую реальность протоколов взаимодействия умных устройств. И, о чудо, я сумел сформулировать запрос для себя правильно, Google помог мне найти «умную розетку с открытым HTTP API».

Что получилось из связки: умная розетка, китайский планшет на Android 11, роутер - можно прочитать под катом.

Читать далее

Generico! Дженерики в go или стоит ли оно того

Время на прочтение9 мин
Количество просмотров7.1K

15 марта 2022 года. Был морозный весенний день. Ветер старался доказать, что он не промах и залезть под куртки, кофты и прочие принадлежности гардероба, чтобы из первых рук, куда уж придётся, принести весеннее настроение через свежесть. Не очень-то у него это получалось. Причем при любом раскладе. Если попадалась хорошая куртка и не пускала незваного гостя - ветру рассказать о весне не получалось. Если же удавалось забраться за шиворот или пройтись ледяным дыханием свежести по пузу - этого уже не понимал прохожий. Кутался еще сильнее и поскорее старался уйти от этого весеннего настроения. Но это была не единственная неоднозначность. Именно 15-го марта в мир была превнесена еще одна неоднозначность, спровоцировавшая жаркие споры - релиз golang 1.18 вместе с системой generic-ов.

Читать далее

Amazon IVS: как быстро добавить видеотрансляции в приложение или на сайт

Время на прочтение12 мин
Количество просмотров2.8K

Video live streaming - это технология потоковой трансляции видео тысячам и миллионам зрителей в режиме близком к реальному времени. Видеостриминг находит своё применение в разных областях: образование, фитнес, онлайн события, электронная коммерция, игры и киберспорт.

В этой статье мы рассмотрим как можно легко интегрировать видеотрансляции в приложение или на сайт, используя AWS interactive video service.

Читать далее

Что такое фаззинг и зачем он нужен?

Время на прочтение8 мин
Количество просмотров45K

Всем привет! Меня зовут Кирилл, я старший разработчик в группе «Полигоны и ограничения доставки» в Ozon. Cегодня я расскажу про фаззинг, встроенный в Go: что это такое, зачем он нужен в разработке программного обеспечения и как с его помощью найти баг в дикой природе open-source-коде (рассмотрим на примере).

Читать далее

Fuzzing-тесты в Go после v1.18: знакомство и практика

Время на прочтение6 мин
Количество просмотров9.6K

Когда говорят о Go 1.18, обычно вспоминают про дженерики и незаслуженно забывают об остальных изменениях. Например, о fuzzing-тестировании, которое раньше можно было запустить только с помощью открытых библиотек. Пора это исправить.

По мотивам выступления Сергея Петрова, разработчика в Selectel, рассказываем, как устроено fuzzing-тестирование в Go. А также показываем, как проверить функцию на корректную валидацию данных. Подробности под катом.
Читать дальше →

Админка для Private Docker Registry (Registry Admin)

Время на прочтение10 мин
Количество просмотров22K

Концепция контейнеризации на базе Docker, и ему подобных технологий, для многих разработчиков стала незаменимым инструментом доставки своих продуктов в виде образов. В большинстве случаев для распространения используются бесплатные реестры такие как Docker Hub или GitHub Container Registry. Но иногда требуется развернуть свой собственный registry и управлять доступом к нему. Вариантов для развертывания своего собственного container registry предостаточно, но я решил сделать свой вариант админки для управления Private Docker Registry.

Читать далее

Моя попытка сделать утилиту для очистки Linux

Время на прочтение3 мин
Количество просмотров12K

Всем привет! Я начинающий разработчик на языке Go. До этого у меня был, так сказать, небольшой опыт, но в виде хобби. Во время изучения я также осваивал Linux, сейчас уже пользуюсь им как основной ОС.

Мой ноутбук довольно слабый, на борту всего 4ГБ ОЗУ, а на Windows существует программа, которая автоматически очищала оперативную память. Поискав в интернете, я понял, что нету такой утилиты, которая быстро и легко могла очистить оперативную память от мусора. Тогда я принялся попробовать написать ее самостоятельно.

В этой статье я расскажу, что я узнал об оперативной памяти и какими способами ее можно очистить.

Читать далее

Golang-дайджест № 24 (1 – 31 декабря  2022)

Время на прочтение3 мин
Количество просмотров4.3K

Свежая подборка новостей и материалов.

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

Go на стороне зла, 3D-графика в Go, руководство по сборщику мусора Go, Под капотом у компилятора Go, Видео и Подкасты.

Читать далее

Неполная, неточная и наполовину выдуманная история исключений

Время на прочтение9 мин
Количество просмотров8.2K

Давным-давно, когда деревья были маленькие, дискеты большие, а трава зеленая, все писали на языках низкого уровня. В этих языках все было целыми числами. Переменные были числами, массивы были и структуры были просто адресами (числами) и смещениями (тоже числами). Даже если указывали тип данных, то он определял только размер памяти для значения.

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

Чтобы программа не грохалась, а выдавала осмысленное сообщение и давала возможность продолжить работу, надо было добавить проверку.

Читать далее

Трейсинг в Go — это просто

Время на прочтение13 мин
Количество просмотров29K

В эпоху быстрорастущих приложений важно иметь возможность контролировать состояние системы в любой момент времени. Одними из требований для достижения этого являются логи и метрики, которые помогают нам следить за многими параметрами, такими как количество запросов в секунду (RPS), потребление памяти, cache git и т.д. Однако, есть ещё один полезный инструмент - трейсинг. В этой статье мы ознакомимся со стандартом OpenTelemetry в языке Go и инструментом Jaeger

Читать далее

Разбираемся в нюансах создания оператора на golang

Время на прочтение11 мин
Количество просмотров11K

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

Читать далее

Эволюция кода: путь к лучшему дизайну

Время на прочтение10 мин
Количество просмотров4.6K

В этой статье мы изучим программное решение экзаменационной задачи конца второго семестра в AltSchool Africa. Эта задача подразумевает построение системы для управления складскими запасами магазина, продающего машины и другие товары. В частности, магазин должен иметь возможность отслеживать количество и общую стоимость проданных и оставшихся на складе товаров.
Читать дальше →

Ближайшие события

Кен Томпсон: живая легенда

Время на прочтение10 мин
Количество просмотров8.5K
image

Людей, внесших значительный вклад в развитие мировой IT-индустрии и вошедших благодаря этому в историю, можно пересчитать по пальцам. Один из них — Кеннет Лейн Томпсон, один из разработчиков Unix, операционных систем Plan 9 и Inferno, создатель языка программирования B, соавтор языка Go. Томпсон принимал участие в конструировании шахматного компьютера Belle, первой машины, достигшей уровня игры мастера с рейтингом USCF 2250. Она пять раз выигрывала чемпионат Северной Америки по компьютерным шахматам ACM и чемпионат мира по компьютерным шахматам 1980 года. В 1983 году Томпсон разделил со своим давним другом и коллегой Деннисом Ритчи премию Тьюринга, неофициально признанную «нобелевкой» в мире компьютерных наук.

Читать дальше →

Go 1.20 и арена памяти

Время на прочтение3 мин
Количество просмотров19K

Одной из революционных особенностей Go в сравнении с другими компилируемыми языками стало автоматическое управление освобождением памяти от неиспользуемых объектов (сборка мусора). В то же время она может привести к потере производительности при передаче контроля процессу управления памятью, но альтернативного механизма в Go представлено не было. Начиная с Go 1.20 появляется поддержка экспериментального решения для управления памятью, которое позволяет совместить безопасное выделение динамической памяти и уменьшить влияние интегрированного в скомпилированный код управления памятью на производительность приложения. В этой статье мы рассмотрим основные аспекты использования Memory Arena в Go 1.20.

Читать далее

Декларативное построение диаграмм

Время на прочтение2 мин
Количество просмотров7.1K

Код может быть красивым сам по себе, но графическое представление не помешает.

Диаграммы, СТАНОВИСЬ!

Go: обобщенные алгоритмы и типы

Время на прочтение10 мин
Количество просмотров11K

До недавнего времени у тех, кто пишет на Go было два пути: копипаста и кодогенерация. Фанатом ни первого, ни второго я не являюсь, однако к моей радости, теперь и в Go есть обобщенные типы. Казалось бы, проблема решена! Но не тут-то было, дженерики Go имеют весьма специфические ограничения, которые, портят всю малину. С одним из них мне и захотелось разобраться.

Читать далее

Как писать код на Go? Подход Google. Часть первая

Время на прочтение11 мин
Количество просмотров7.6K

Рекомендации по стилю для проектов из Google с открытым исходным кодом


Руководство по стилю Go


Принципы стиля


Есть несколько охватывающих всё принципов, которые резюмируют представления о том, как писать читаемый код на языке Go. Ниже перечислены признаки читаемого кода в порядке их важности:


  1. Ясность: Назначение и обоснованность кода должны быть понятны читателю.
  2. Простота: Код должен выполнять свою задачу самым простым способом.
  3. Лаконичность: Код должен содержать как можно меньше воды.
  4. Сопровождаемость: Код должен быть написан так, чтобы его легко было поддерживать.
  5. Согласованность: Код должен согласоваться с более масштабной кодовой базой Google.

Подробности — к старту курса по Backend-разработке на Go.

Читать дальше →

3D-графика в Go

Время на прочтение9 мин
Количество просмотров12K

В большинстве случаев, когда речь заходит об использовании Go, вспоминается backend или DevOps и в самую последнюю очередь можно подумать об использовании Go для создания мобильных или десктопных приложений. Но в действительности, благодаря возможностям интеграции с нативными библиотеками (в том числе, OpenGL и OpenAL для пространственного звука) Go может использоваться и для создания игр (в том числе для мобильной платформы).

В этой статье мы обсудим несколько библиотек, которые могут помочь в создании 3D-графики на Go и обсудим вопросы портирования приложений на мобильные платформы.

Читать далее

Схема разделения секрета Шамира в Hashicorp Vault

Время на прочтение9 мин
Количество просмотров4.7K

Реализация схемы разделения Шамира в Hashicorp Vault, которую я попытался описать.

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

Читать далее

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