// теперь в Go так можно! slices.Contains(s, v) Год назад в блоге Каруны мы писали про дженерики в Go, и там упоминалось, что гошное сообщество разделилось на две части. Не всем это нововведение было нужно, особенно в простом продуктовом коде. И надо сказать, это до сих пор так, дженерики по-прежнему используют далеко не все проекты. Однако для стандартной библиотеки Go это было по-настоящему царским подарком. Появились новые стандартные обобщенные функции, и, отстоявшись в экспериментальном р…
Для того чтобы повысить качество приложения, написанного на языке go, можно использовать разные линтеры. Один из таких линтеров — архитектурный.В приложении архитектура — это то, как код разложен по «слоям», и какие слои могут вызывать друг друга.В данной статье расскажу про свой бесплатный, open-source, линтер с MIT лицензией и чем он может быть полезен.TLDR — Getting startedЛинтер работает с любым кодом, не только с web-приложениями, но для примера посмотрим на web-приложение с одним АПИ мет…
ВведениеКак протестировать код на Go с базой данных? В этой статье опишу пример такого тестирования в связке с Postgres, очисткой на основе копирования базы данных и рассмотрю некоторые альтернативы.Зачем тестировать с базой данных?Чтобы получить более полезные тесты, которые:помогут избавиться от множества mock-ов;облегчат рефакторинг базы данных;уменьшат хрупкость тестов и скованность кодовой базы.Интересная цитата на тему таких тестов:Хорошо продуманные тесты базы данных обеспечивают надежн…
Все мы знаем эту историю, когда нужно скопировать какую-нибудь большую структуру, внутри которой множество указателей на другие структуры. Руками это делать лень, поэтому берём какую-нибудь библиотеку и быстро делаем копию. А потом в свободное время решаем проверить, что там с оверхедом. Меня зовут Егор Гартман, я работаю в бекэнде Авито и я решил протестировать несколько библиотек Deep Copy. А потом сделал свою — быстрее и эффективнее. Сравнение готовых решенийДля сравнения я выбрал три библи…
Когда-то я написал статью о том, как начинать проект на Go в 2018 году. С тех пор многое изменилось, и я захотел написать обновлённую версию статьи. В ней я расскажу всё, что нужно новичку, чтобы приступить к работе с Go.Установка/настройкаПервым делом нужно скачать и установить Go. Рекомендую всегда устанавливать его с самого вебсайта Go https://golang.org/ и выполнить инструкции для соответствующей операционной системы. За исключением релиза Go 1.18 (в который включены дженерики), у меня ник…
Жаворонок, картинка утащена с ВикипедииЧто за птица?Starlark (ранее известный как Skylark) - питоноподобный язык, изначально разработанный для системы сборки Bazel, со временем выбравшийся за её пределы через интерпретаторы для Go и Rust.Язык располагает к использованию в роли инструмента конфигурации, однако, благодаря хорошо написанному интерпретатору на Go и детальному описанию спецификации, его можно использовать в виде встроенного в приложение языка программирования - например, когда вы х…
Всем привет! Меня зовут Владимир Олохтонов, я руковожу командой разработки в отделе Message Bus, который является частью платформы Ozon. Мы занимаемся разработкой самых разных систем вокруг Kafka, etcd и Vault. В этой статье я расскажу о том, как мы строили линейно масштабируемую gRPC-прокси перед Kafka, способную обслуживать миллионы запросов в секунду, используя Go.Пруфы :)У нас довольно крупный кластер. Он состоит из 75 брокеров, управляет 30 000 партиций, а рейт поднимается до 5 млн запрос…
Мотивация написания статьиВсем нам предстоит поддерживать уже существующий код, а также проводить ревью кода коллег. Иногда становится очень тяжело видеть некоторые паттерны, которые кажутся безобидными, но при некорректном использовании или после неосторожного рефакторинга могут привести к различным проблемам:утечке горутин и каналовповреждению целостности структур данныхпаникамтрудноуловимым багам в бизнес-логикесамому страшному - неутолимому желанию порефакторить код, который выглядит как т…
Частичный перевод моей статьи с MediumНачнем с того, что эта статья как и большинство моих статей родилась в процессе разработки. В данном конкретном случае - разработки внешней крипто-библиотеки для генерации крипто-кошельков.Да, определенно. Я считаю, что приставка "крипто" любому словосочетанию придает привкус гигантской яхты дрейфующей где-то в Майами.В итоге, выбор упал на Rust потому что я уже работал с ним, и знаю, что crates.io изобилует всякими библиотеками для работы с разноо…