Category : golang

golang
От C до Go. Как Golang объединил лучшие черты своих предшественников

В программировании постоянно разрабатываются новые языки. В каждом из них разработчики стремятся расширять возможности предыдущих технологий. Одним из таких примеров является язык Go, или Golang (Google language). Разработанный в компании Google, Golang был создан с целью объединить черты своих предшественников и предложить программистам новый инструмент для создания приложений. Когда создатели Golang приступили к разработке, они учитывали опыт различных языков, таких как C, C++, Java и Pyth…

  • среда, 2 августа 2023 г. в 00:00:20
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