Category : golang

golang
В Go 1.21 существенно расширяется стандартная библиотека

// теперь в Go так можно! slices.Contains(s, v) Год назад в блоге Каруны мы писали про дженерики в Go, и там упоминалось, что гошное сообщество разделилось на две части. Не всем это нововведение было нужно, особенно в простом продуктовом коде. И надо сказать, это до сих пор так, дженерики по-прежнему используют далеко не все проекты. Однако для стандартной библиотеки Go это было по-настоящему царским подарком. Появились новые стандартные обобщенные функции, и, отстоявшись в экспериментальном р…

  • вторник, 1 августа 2023 г. в 00:00:29
golang
Golang — архитектурный линтер

Для того чтобы повысить качество приложения, написанного на языке go, можно использовать разные линтеры. Один из таких линтеров — архитектурный.В приложении архитектура — это то, как код разложен по «слоям», и какие слои могут вызывать друг друга.В данной статье расскажу про свой бесплатный, open-source, линтер с MIT лицензией и чем он может быть полезен.TLDR — Getting startedЛинтер работает с любым кодом, не только с web-приложениями, но для примера посмотрим на web-приложение с одним АПИ мет…

  • воскресенье, 30 июля 2023 г. в 00:00:33
golang
Как протестировать код на Go с базой данных?

ВведениеКак протестировать код на Go с базой данных? В этой статье опишу пример такого тестирования в связке с Postgres, очисткой на основе копирования базы данных и рассмотрю некоторые альтернативы.Зачем тестировать с базой данных?Чтобы получить более полезные тесты, которые:помогут избавиться от множества mock-ов;облегчат рефакторинг базы данных;уменьшат хрупкость тестов и скованность кодовой базы.Интересная цитата на тему таких тестов:Хорошо продуманные тесты базы данных обеспечивают надежн…

  • воскресенье, 30 июля 2023 г. в 00:00:33
golang
Сравниваем скорость и оверхеды библиотек Deep Copy для Go

Все мы знаем эту историю, когда нужно скопировать какую-нибудь большую структуру, внутри которой множество указателей на другие структуры. Руками это делать лень, поэтому берём какую-нибудь библиотеку и быстро делаем копию. А потом в свободное время решаем проверить, что там с оверхедом. Меня зовут Егор Гартман, я работаю в бекэнде Авито и я решил протестировать несколько библиотек Deep Copy. А потом сделал свою — быстрее и эффективнее. Сравнение готовых решенийДля сравнения я выбрал три библи…

  • пятница, 28 июля 2023 г. в 00:00:21
golang
Как начинать проект на Go в 2023 году

Когда-то я написал статью о том, как начинать проект на Go в 2018 году. С тех пор многое изменилось, и я захотел написать обновлённую версию статьи. В ней я расскажу всё, что нужно новичку, чтобы приступить к работе с Go.Установка/настройкаПервым делом нужно скачать и установить Go. Рекомендую всегда устанавливать его с самого вебсайта Go https://golang.org/ и выполнить инструкции для соответствующей операционной системы. За исключением релиза Go 1.18 (в который включены дженерики), у меня ник…

  • среда, 26 июля 2023 г. в 00:00:16
golang
Добавляем Starlark в приложение на Go

Жаворонок, картинка утащена с ВикипедииЧто за птица?Starlark (ранее известный как Skylark) - питоноподобный язык, изначально разработанный для системы сборки Bazel, со временем выбравшийся за её пределы через интерпретаторы для Go и Rust.Язык располагает к использованию в роли инструмента конфигурации, однако, благодаря хорошо написанному интерпретатору на Go и детальному описанию спецификации, его можно использовать в виде встроенного в приложение языка программирования - например, когда вы х…

  • вторник, 25 июля 2023 г. в 00:00:25
golang
Как построить систему, способную выдерживать нагрузку в 5 млн rps

Всем привет! Меня зовут Владимир Олохтонов, я руковожу командой разработки в отделе Message Bus, который является частью платформы Ozon. Мы занимаемся разработкой самых разных систем вокруг Kafka, etcd и Vault. В этой статье я расскажу о том, как мы строили линейно масштабируемую gRPC-прокси перед Kafka, способную обслуживать миллионы запросов в секунду, используя Go.Пруфы :)У нас довольно крупный кластер. Он состоит из 75 брокеров, управляет 30 000 партиций, а рейт поднимается до 5 млн запрос…

  • пятница, 21 июля 2023 г. в 00:00:16
golang
Go: особенности написания конкурентных программ

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

  • четверг, 20 июля 2023 г. в 00:00:15
golang
Криптография на Rust и немного FFI

Частичный перевод моей статьи с MediumНачнем с того, что эта статья как и большинство моих статей родилась в процессе разработки. В данном конкретном случае - разработки внешней крипто-библиотеки для генерации крипто-кошельков.Да, определенно. Я считаю, что приставка "крипто" любому словосочетанию придает привкус гигантской яхты дрейфующей где-то в Майами.В итоге, выбор упал на Rust потому что я уже работал с ним, и знаю, что crates.io изобилует всякими библиотеками для работы с разноо…

  • вторник, 18 июля 2023 г. в 00:00:19