Конференция завершена. Ждем вас на Golang Live в следующий раз!

Заявки на доклады

Поиск по тегам:
Показать все доклады

Автоматизированное тестирование

Каждый день на сайте Ozon.ru и в мобильных приложениях больше 3 млн посетителей выбирают из 6,5 млн товаров, делают больше 200 тысяч заказов. При этом мы, имея относительно небольшой штат специалистов по тестированию, каждый день работаем над улучшением клиентского опыта. Мы выпускаем обновления по 50-60 раз каждый день и время, которое требуется от пуша кода в репозиторий до Production, составляет 20-25 минут.

Я расскажу, как мы переписали тесты с Python на Golang, с какими сложностями столкнулись и как мы смогли их преодолеть. Поговорим о плюсах и минусах написания тестов на Go. Поговорим про инструменты, которые мы используем для тестирования. Поделюсь планами на будущее.

Доклад принят в программу конференции

Кастомные линтеры

* Введение в go-ruleguard, CodeQL, semgrep.
* Чем эти инструменты лучше, чем написание своего линтера с нуля.
* Ограничения этих инструментов.
* Примеры интеграции go-ruleguard в CI.

Доклад принят в программу конференции

Другое

Code editors are part of our day to day life, regardless of the operating system, programming language, or proficiency with the language. As such, we expect them to adapt to our workflows, we want them to be smart when they are needed, and stay out of our way otherwise.

This talk will explore how the built-in, real-time, code analysis integrates with IDE and provides contextual feedback and solutions for users. It will also present how the refactoring options allow users to perform operations such as extracting interfaces from types, moving types across packages, and others in a safe manner across large codebases.

Not a GoLand user? Don’t worry; the talk will contain information that should allow you to get started, by showing you how to start with the environment setup, new project and all the way to the commit and push phase. Or it will help you to decide if you want to avoid it altogether.

Are you interested in tooling for Go in general? Then the talk will allow you to see how the IDE perform static code analysis on the Go sources, explain the benefits of the IntelliJ Platform for developing tooling for languages, and provide a different perspective on how Go tooling could interact with code. The presentation will also describe some of the features that make the platform unique.

Доклад принят в программу конференции

As Go becomes increasing popular and more widely used it is going to become a target for hackers! Most Go programmers are already familiar with linters so SAST (Static Application Security Testing) should be no surprise but what about your open source? SCA (Software Composition Analysis) helps you detect and manage the open source in your application in the development lifecycle and beyond. This talk will look at these two different technologies, what they can find and how they can keep your applications safe and secure.

Доклад принят в программу конференции

Ускорение разработки типовых проектов

Go’s adoption rate is impressive, surpassed perhaps only by the adoption of serverless cloud technologies. We’ll explore how we write serverless Go code for complex APIs deployed in environments such as Lambda and Google Cloud Functions, focusing on testing and abstraction.

Доклад принят в программу конференции

Когда команда начинает писать первые микросервисы, то каждый из них получается по-своему "уникальным": со своим набором библиотек и особенностей. Когда микросервисов становится много, то для упрощения их поддержки и разработки хочется, чтобы они были как можно более "одинаковыми".

Поговорим о том, как написать свой собственный фреймворк, который:
- учитывает особенности инфраструктуры, в которой будут разворачиваться микросервисы,
- позволяет избавиться от boilerplate-кода,
- унифицирует используемые сторонние библиотеки между разными микросервисами,
- упрощает жизнь разработчика и позволяет написать новый микросервис в несколько строк кода.

Доклад принят в программу конференции

Меня зовут Ваня, я разработчик продуктовой команды Авито – Auto B2B. В этом докладе я расскажу, как организована разработка на Go в Авито.

Вы узнаете:
- зачем нужны платформенные решения для создания микросервисов;
- из каких частей состоит наш общий toolkit PaaS (Platform as a Service);
- как происходит создание и развитие микросервиса в Авито на живом примере.

Если вам интересно, как можно автоматизировать повседневные задачи разработчиков и
построить удобную систему оркестрирования зависимостей ваших сервисов – этот доклад для вас :)

Доклад принят в программу конференции

Кодогенерация

Все мы сталкивались с теми трудностями, которые возникают при интеграции своего API с другими сервисами. Конечно же, документирование призвано решить эту проблему. Поэтому мы рассмотрим такие средства, как OpenAPI и Swagger.

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

Тут нас спасает автогенерация. Она позволяет нам держать все в одном месте и не тратить уйму времени на обновления. Существует 2 подхода при написании документированных API:
1. разработка по спецификации,
2. генерация спецификации по нашему коду.

Пришло время рассмотреть, какой из подходов лучше всего выбрать именно вам и какие инструменты позволяют нам генерировать готовый веб-сервер на языке Golang из спецификации OpenAPI и генерировать спецификацию из аннотаций в нашем коде. Для этого разберем такие инструменты как:
• swagger-api/swagger-codegen,
• go-swagger/go-swagger,
• swaggo/swag,
• grpc-ecosystem/grpc-gateway.

Более детально рассмотрим grpc-gateway. Он позволит нам генерировать интерфейсы gRPC, RESTful JSON API, WebSocket и OpenAPI из одного .proto-файла.

Сначала создадим gRPC-интерфейс, поэтому рассмотрим основные моменты его описания, плюсы и минусы его использования и как их поддерживать. А после сгенерируем обратный прокси-сервер к нему, который будет переводить RESTful JSON API и WebSocket в gRPC и обратно. Поговорим о плюсах и минусах этого решения, в каких ситуациях стоит использовать, а в каких нет.

Доклад принят в программу конференции

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

Доклад принят в программу конференции

Go в продуктовой разработке

Мы любим Go прежде всего за высокую продуктивность и производительность. Но расплатой за "лёгкость" и скорость разработки являются задержки на сборку мусора, обработку блокировок и не всегда оптимальное хранение данных в памяти. Данные проблемы часто провоцируют переписывание критичных ко времени отклика сервисов, таких как базы данных, на использование более низкоуровневых языков (C/C++/Rust). Мы рассмотрим, как обойти некоторые ограничения Go и реализовать высоконагруженный сервис для хранения данных в формате ключ/значение, реализовав как компактный движок, мало подверженный проблемам сборки мусора и аллокаций, так и высокопроизводительный сокет-сервер, обслуживающий десятки тысяч запросов в секунду с минимальной задержкой.

Исходный код предлагаемых решений открыт:
* https://github.com/recoilme/sniper — компактное, эффективное решение для хранения данных, сопоставимое по производительности с решениями на низкоуровневых языках;
* https://github.com/recoilme/b52 — экспериментальный, совместимый с мемкэш сервер базы данных ключ/значение.

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

Доклад принят в программу конференции
Доклад принят в программу конференции

DSL are common to almost all developer tools. They abstract the complexity of logic that developers need to repeat, and provide simple reusable functions to the consumer. At the same time, the datatypes, expressions, and statements can be limited and statically verified to prevent Latent Bugs that configuration languages have to suffer from.

In this session, I will take a small use case of building alerts against some queries a database. But rather than allow developers to send naked queries against my database, I would rather expose a DSL that transpiles the DSL to the appropriate queries to the data storage backend. This has multiple advantages:
* Developer doesn't have to worry about the underlying change in Implementation. It's like an API call, only as a system command.
* We have tight control of what queries need to be executed really. This is done to have control over the performance of the queries sent to the datastore
* Any complex set of inputs, do not have to be passed as long function / SDK arguments.

One such example is Terraform. It's a DSL that allows functions as well as some degree of expressions to wrap repeat tasks underneath.

The session's aim is to leave the audience with a framework and understanding of the ease of writing such DSLs. There is some code, some snippets and a use case to build a DSL for.

The job of the DSL doesn't end there, a good DSL nudges the developer to make less mistakes and catch as much as possible earlier. And occasionally add support for inbuilt more functions. The lifecycle of DSL is covered during the talk, accompanied with code samples.

The DSL, that will be demonstrated, is being used at Last9 to alert customers in real-time using a variety of data backends at a substantial concurrency.

Доклад принят в программу конференции

Clean architecture

На Go я пишу уже порядка 5 лет и в этом докладе хочу поделиться с вами своими best practices в обработке ошибок, наработанными за это время. Если вы разрабатываете на Go нечасто либо только пришли в него, то этот доклад для вас.

Я познакомлю вас с шестью помарками, которые при обработке ошибок допускают многие, даже опытные ребята.

Доклад принят в программу конференции

* Предшественники гексагональной архитектуры.
* Как и зачем появилась гексагональная архитектура.
* Что такое гексагональная архитектура.
* Что такое порты и адаптеры.
* Пример: эволюция Go-приложения от "big ball of mud" до hexagonal architecture.
* Инструменты для построения архитектуры в GO (go kit).
* Гексагональная архитектура в контексте DDD.

Доклад принят в программу конференции

Процесс разработки сервисов от проектирования до выкладки

Работа.ру — один из крупнейших сервисов России по поиску работы и сотрудников. И поисковый движок для него критически важен.

В докладе я расскажу вам, как прежнее решение на основе Solr перестало нас устраивать и, более того, стало настоящим препятствием. Нам пришлось убедить руководство пойти на риск и написать свой поисковый сервис на Go. Расскажу, с какими проблемами мы столкнулись и как мы их решали.

Вы узнаете:
— как собрать прототип и проверить свои гипотезы;
— какими программными способами можно построить архитектуру leader-follower-сервиса;
— как обновлять индекс в RAM при конкурентном доступе к нему;
— как выстроить шардирование вашего сервиса;
— что нужно вывести наружу для мониторинга сервиса.
и многое другое...

Доклад принят в программу конференции

Вы даже себе представить не можете, сколько Go-кода уже написано в Uber. Наличие большого числа проектов и кода заставляет двигаться в сторону стандартизации, guidelines и code style. В ходе доклада я в легкой и ненавязчивой манере расскажу про то, как мы разрабатываем Uber.

Доклад принят в программу конференции

2020 – год, когда два стандарта OpenTracing и OpenCensus окончательно объединились в один – OpenTelemetry, стандарт распределенного трейсинга и мониторинга.

Несмотря на то, что разработка библиотек идет полным ходом, реального опыта использования пока маловато.

Это нужно исправить! Я покажу, как применять OpenTelemetry в Golang-проектах, как настроить его использование для трейсинга и мониторинга и как подружить его с популярными решениями для того и другого, а также с уже существующей в проекте инфраструктурой.

После доклада вы будете готовы использовать OpenTelemetry на своем проекте и помочь друзьям с переходом.

Доклад принят в программу конференции

Unsafe и низкоуровневые оптимизации

В Go есть пакет unsafe, который позволяет обойти ограничения Go, ускорить работу программы либо выстрелить себе в ногу.

В докладе рассматриваются практические примеры использования пакета unsafe, взятые из fasthttp, quicktemplate и VictoriaMetrics, которые позволили оптимизировать скорость выполнения кода в этих проектах.

Также в докладе рассматриваются примеры некорректного либо нежелательного использования пакета unsafe.

Доклад принят в программу конференции