Блог Golang | OTUS
Посты
Каналы каналов в Go

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

Двумерные срезы в Go

В языке программирования Go массивы и срезы являются одномерными. Для создания эквивалента 2-мерного массива либо среза надо определить массив массивов либо срез срезов. Давайте посмотрим, как это может выглядеть:

Аллокация с помощью make в Go

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

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

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

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

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

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

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