Блог Golang → Полезные материалы по Go | OTUS

Курсы

Программирование
C# Developer. Professional Flutter Mobile Developer C# Developer. Basic C# Developer PHP Developer. Basic
-50%
Специализация PHP Developer Буткемп Java Python Developer. Professional Архитектура и шаблоны проектирования MS SQL Server Developer Highload Architect C++ Developer. Professional Java Developer. Basic JavaScript Developer. Professional JavaScript Developer. Basic HTML/CSS Kotlin Developer. Basic Android Developer. Basic Специализация Android-разработчик Team Lead Web-разработчик на Python Unity Game Developer. Professional PostgreSQL для администраторов баз данных и разработчиков Алгоритмы и структуры данных Разработчик программных роботов (RPA) на базе UiPath и PIX Kotlin Backend Developer React.js Developer Node.js Developer Разработчик IoT Подготовка к сертификации Oracle Java Programmer (OCAJP) Специализация C++ Developer Groovy Developer
Специализации Курсы в разработке Подготовительные курсы Подписка
+7 499 938-92-02
Аллокация с помощью make в Go

GoPro_Headline_970x70-1801-dc9277.png

В языке программирования Go существует встроенная функция make(T, args). По своему назначению она отличается от функции new(T) и создает лишь срезы, каналы и карты, возвращая инициализированное значение типа T(не *T).

Оператор defer в языке Go

GoPro_Headline_970x70-1801-dc9277.png

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

Экспортируем интерфейс вместо типа в Go

GoPro_Headline_970x70-1801-dc9277.png

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

Форматирование в Go

GoPro_Headline_970x70-1801-dc9277.png

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

Распараллеливание вычислений в Go

GoPro_Headline_970x70-1801-dc9277.png

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

Ограничиваем скорость операций в Golang

GoPro_Headline_970x70-1801-dc9277.png

Для ограничения скорости операций в единицу времени в языке программирования Go можно использовать time.Ticker. Это неплохо работает для скоростей до нескольких десятков операций в секунду. Если же речь идет о более высоких скоростях, тогда лучше отдавать предпочтение ограничителю скорости сегмента токенов, например, Limiter из golang.org/x/time/rate.

Каналы в Go

GoPro_Headline_970x70-1801-dc9277.png

В языке программирования Go каналами существуют типизированные «каналы», по которым разработчик может посылать и получать значения, используя для этого оператор <-. Давайте посмотрим, как это выглядит на практике.