Go

Go #

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

Базовый синтаксис #

Под базовым синтаксисом понимаются основы - переменные и типы данных, ветвления, цикл for.

По этому материалу существует огромное количество ресурсов, книг, курсов. Я советую совмещать теорию с практикой. В качестве теории - книгу или курс, в качестве практики по закреплению синтаксиса - задачи.

Избранные курсы и учебные ресурсы #

  • Курс “Ultimate Go Tour” Ardanlabs, курс по основам go, аналог go tour
  • Курс “Go: шаг за шагом” хороший курс от Яндекса с множеством практических заданий, имеет 3 части
  • Курс “Learn Go with Tests” изучения go с помощью написания тестов
  • “Программирование на Go” - Алан А. А. Донован, Брайан У. Керниган, отличная книга для глубокого изучения go
  • Мой live-coding стрим по написанию проекта в процедурном стиле - https://www.youtube.com/watch?v=PPikj1qHxrA
  • Практика:

Предлагаемый порядок изучения материалов:

  • Выбрать 1 курс или книгу, точечно изучить те главы, которые я озвучил
  • Параллельно изучению теории решать задачи
  • Написать проект “Виселица”

Объектно-ориентированный стиль в Go #

Go не является классическим ООП-языком: в нём нет классов, наследования и виртуальных методов. Однако он поддерживает объектно-ориентированный стиль программирования - через композицию, интерфейсы и методы, привязанные к типам.

Этот подход требует осознанного проектирования: вместо иерархий наследования - чёткие контракты и переиспользуемые компоненты. “Глубина” здесь проявляется не в количестве паттернов, а в умении строить гибкие, тестируемые и расширяемые архитектуры без наследования.

Что нужно знать и уметь:

  • Определять методы для структур и именованных типов (func (r Receiver) Method())
  • Использовать встраивание (embedding) для композиции поведения - не как замену наследованию, а как способ делегирования
  • Работать с интерфейсами: объявлять, имплементировать неявно, применять для инверсии зависимостей (например, io.Reader, http.Handler)
  • Проектировать маленькие, сфокусированные интерфейсы (accept interfaces, return structs)
  • Избегать интерфейсного перепроектирования: не создавать интерфейсы “на будущее”, а выделять их по мере появления второй реализации, задумываться о применение в тестирование
  • Понимать разницу между структурной типизацией и номинальной, и как это влияет на рефакторинг и дизайн API

Избранные курсы и учебные ресурсы #

Предлагаемый порядок изучения материалов:

  • Изучить видео из списка
  • Написать проект “Симуляция”

Паттерны проектирования #

Паттерны проектирования, общепринятые “рецепты” классов для решения повторяющихся задач. Большинство задач являются типовыми, или их вариациями, и паттерны проектирования предлагают набор решения для этих задач.

Каждый паттерн - класс или семейство классов с определённым стилем именования и набором методов.

Что нужно знать:

  • Постепенно осваивать паттерны, начиная с самых популярных - Singleton, Factory

Избранные курсы и учебные ресурсы #

MVC #

MVC - самый актуальный для бэкенд приложений паттерн.

Суть MVC - разбиение кода на “слои”, каждый из которых занимается одной задачей:

  • Модели - описывают сущности приложения
  • View - отображение состояния, в виде веб-страниц, JSON ответов
  • Контроллер - принятие запросов от пользователя, создание модели и view для генерации ответа

Зачастую, MVC расширяется ещё одним слоем - Service, такой паттерн называется MVCS. Классы-сервисы описывают бизнес-логику приложения.

Избранные курсы и учебные ресурсы #

LayeredArchitecture #

Слоистая архитектура (layered architecture) — один из самых распространённых и проверенных подходов к организации backend-приложений на Go. Она основана на идее вертикального разделения системы на логические слои, где каждый слой отвечает за строго определённую область ответственности и взаимодействует только со смежными слоями.

Избранные курсы и учебные ресурсы #

Чистый код #

Чистый код - это код, понятный и податливый к изменениям. Писать такой код - навык, развивающийся на протяжении всей карьеры.

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

Избранные курсы и учебные ресурсы #

  • Книги - “Чистый код” Мартина, “Рефакторинг” Фаулера, “Совершенный код” Макконнелла
  • Плейлист с избранными ревью реализаций проектов курса студентами - https://www.youtube.com/playlist?list=PLOVOZrcS3XMbS4iInU-7p6TbIQW-kATfz
  • Практика:
    • Писать проекты курса, отправлять их мне на ревью. Примеры готовых проектов с ревью
    • Читать чужой код и оценивать его качество