Обновить
178.4

Go *

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

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

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

Время на прочтение8 мин
Охват и читатели61K

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

Читать далее

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

Время на прочтение6 мин
Охват и читатели12K

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

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

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

Время на прочтение10 мин
Охват и читатели29K

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

Читать далее

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

Время на прочтение3 мин
Охват и читатели13K

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

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

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

Читать далее

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

Время на прочтение3 мин
Охват и читатели4.6K

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

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

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

Читать далее

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

Время на прочтение9 мин
Охват и читатели8.4K

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

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

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

Читать далее

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

Время на прочтение13 мин
Охват и читатели37K

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

Читать далее

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

Время на прочтение11 мин
Охват и читатели12K

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

Читать далее

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

Время на прочтение10 мин
Охват и читатели4.7K

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

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

Время на прочтение10 мин
Охват и читатели10K
image

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

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

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

Время на прочтение3 мин
Охват и читатели21K

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

Читать далее

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

Время на прочтение2 мин
Охват и читатели7.9K

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

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

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

Время на прочтение10 мин
Охват и читатели12K

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

Читать далее

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

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

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

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


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


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


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


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

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

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

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

Время на прочтение9 мин
Охват и читатели14K

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

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

Читать далее

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

Время на прочтение9 мин
Охват и читатели5.3K

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

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

Читать далее

Flamingo, Go ahead! или Как реализовать DDD в Go?

Время на прочтение7 мин
Охват и читатели5.7K

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

При проектировании нового программного решения была поставлена задача выбрать язык и фреймворк. По результатам проведенного исследования был выбран язык Go, как обеспечивающий высокую производительность вместе со скоростью разработки, а также фреймворк Flamingo для реализации принципов Domain Driven Design. Всем, кому интересно узнать, что же за птица такая Flamingo, приглашаю под кат.

Концепция предметно-ориентированного проектирования, она же DDD (Domain Driven Design), описанная Эриком Эвансом, активно используется при построении информационных систем для предприятий. Не стоит пересказывать основные принципы DDD, благо, помимо книги самого Эванса, они описаны в большом количестве статей. Нам важно другое. Эти принципы гораздо проще реализовать в своей информационной системе, если они поддерживаются фреймворком.

Для .Net, например, есть ASP.NET Boilerplate (https://aspnetboilerplate.com/), полностью реализующая все компоненты DDD – Entity, Value, Repository, Domain Service, Unit of Work и еще много всего. Но мы для одной из своих внутренних информационных систем используем Go. 

Мы решили использовать фреймворк Flamingo, распространяемый под лицензией MIT. Он разработан немецкой компанией AOE GmbH в 2018 году и к настоящему моменту “дорос” до версии 3.4 и до 331 звезды на Github. Flamingo используется в информационных системах аэропортов Окланда, Франкфурта и Хитроу, а также в T-Mobile.

Читать далее

«Видишь гофера? А он есть». Чем живут русскоязычные golang-разработчики

Время на прочтение1 мин
Охват и читатели14K

Если ты пишешь на Go, то владеешь супервостребованной технологией. Добро пожаловать в клуб! Нам в СберМаркет Tech интересно узнать, как учатся и делятся опытом русскоязычные гошники, какой стек используют и какие задачи решают на работе. Думаем, о жизни Golang-комьюнити будет интересно узнать и вам.

Уделите нам 10 минут, ответив на 14 простых вопросов, а мы поделимся результатами: найдем в результатах самые неочевидные и интересные факты, а также составим по вашим ответам список актуальных ресурсов, где прокачиваются Golang-разработчики.

Пройти опрос

Как починить QA-отдел, или Ещё один переезд в Go

Время на прочтение11 мин
Охват и читатели7.8K

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

Меня зовут Саша, я занимаюсь разработкой инструментов мониторинга тестирования, но по факту ещё и исполняю роль руководителя направления QA в домене Маркетплейса, ответственном за создание всех карточек товаров на Ozon.  

Если вкратце, наша задача заключается в сопровождении селлера от этапа загрузки файла Excel, в котором есть сто тысяч пар носков, до момента, когда все эти носки окажутся на витрине Ozon. Очевидно, что мы занимаемся не только парсингом экселек — у нас есть и highload-сервисы раздачи контента, несколько стейт-машин, системы с мастер-данными всего Озона, и немалый отдел ML, так что мы регулярно сталкиваемся со сложными и нестандартными задачами, подход к решению которых, впрочем, мы всё-таки пытаемся стандартизировать. 

За последние полтора года, как наше направление отделилось от основной разработки Маркетплейса, QA-отдел вырос в пять раз, с 5 до 25 QA-инженеров. О том, как мы решали вопросы масштабирования команды и плакали пытались справиться с legacy-наследием в доставшихся нам процессах, подробнее расскажу под катом. 

Читать далее

Под капотом у компилятора Go: добавление нового оператора в Go — часть 1

Время на прочтение11 мин
Охват и читатели13K

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

Мы собираемся изменить компилятор Go, добавив новую (условно) языковую фичу, и собрать модифицированный компилятор, чтобы ее опробовать.

Читать далее

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