Свържете се с нас

Съдържание и теми, включени в курса

1. Въведение в Go

  • Какво е Go (Golang)?
  • История и дизайнерска философия на Go
  • Go като език за уеб и системно програмиране
  • Ключови характеристики:
    • Статично типизиране
    • Простота и четимост
    • Бързо компилиране
    • Вградена конкурентност
    • Събиране на боклук (Garbage Collection)
    • Кросплатформено компилиране
  • Общи употреби на Go
  • Предимства и ограничения на Go
  • Сравнение на Go с C/C++, JavaScript, Ruby, Python и Java
  • Разбиране на екосистемата на Go
  • Преглед на стандартната библиотека на Go
  • Модули на Go и управление на зависимостите
  • Анатомия на приложение на Go
  • Практика: Разглеждане и изпълнение на прост програма на Go

2. Настройване на средата за разработка на Go

  • Инсталиране на Go
  • Разбиране на инструменталния набор (toolchain) на Go
  • Конфигуриране на променливи на средата
  • Избор на IDE или редактор на код
  • Използване на командния ред с Go
  • Създаване на работно пространство (workspace) на Go
  • Разбиране на структурата на проекта Go
  • Инициализиране на проект с Go Modules
  • Използване на go mod init
  • Управление на зависимостите с go get
  • Обновяване и инспекция на зависимостите
  • Форматиране на изходния код с gofmt
  • Изпълнение на програми с go run
  • Компилиране на приложения с go build
  • Инсталиране на приложения на Go
  • Крос-компилиране на приложения
  • Практика: Създаване и конфигуриране на проект Go в контейнер

3. Променливи, константи и типове в Go

  • Деклариране на променливи
  • Експлицитни срещу инферирани типове
  • Кратко деклариране на променливи
  • Константи
  • Нулеви стойности
  • Обхват и жизнен цикъл на променливите
  • Примитивни данни типове:
    • Цели числа
    • Числа с плъваща запетая
    • Комплексни числа
    • Булеви стойности
    • Стрингове
  • Конвертиране на типове
  • Работа с Unicode и UTF-8
  • Runes и байтове
  • Мултиплес присвояване на променливи
  • Разбиране на безопасността на типовете
  • Упражнение: Изграждане на малка конзолна програма за обработка на данни

4. Оператори и изрази

  • Аритметични оператори
  • Оператори за сравнение
  • Логически оператори
  • Оператори за присвояване
  • Инкремент и декремент
  • Приоритет на операторите
  • Работа с аритметика за цели числа и числа с плъваща запетая
  • Избягване на чести грешки при конвертиране на типове
  • Упражнение: Имплементация на изчисления и логика за валидация

5. Дати, времена и форматиране

  • Използване на пакета time
  • Създаване и манипулиране на дати
  • Получаване на текущото време
  • Часови зони и локации
  • Разбиране (Parsing) на дати и времена
  • Форматиране на дати и времена
  • Изчисляване на продължителности
  • Работа с Unix timestamps
  • Обработка на таймауты
  • Упражнение: Добавяне на временни марки и изчисления на продължителност към приложение

6. Масиви, Slice-и, Maps и Structs

Масиви

  • Деклариране на масиви
  • Инициализиране на масиви
  • Итерация върху масиви
  • Мултидименсионални масиви

Slice-и

  • Разбиране на slice-ите спрямо масивите
  • Създаване на slice-и
  • Добавяне на елементи
  • Копиране на slice-и
  • Дължина и капацитет на slice-и
  • Слагане (Slicing) на slice-и
  • Чести капани при работа с slice-и

Maps

  • Създаване на maps
  • Добавяне и премахване на записи
  • Проверка дали ключ съществува
  • Итерация върху maps
  • Maps, съдържащи сложни данни

Structs

  • Дефиниране на структури

  • Поля на structs

  • Инициализиране на structs

  • Вложени structs

  • Анонимни structs

  • Методи на structs

  • JSON тагове за structs

  • Практика: Моделуване на потребители, продукти и данни на приложение с помощта на structs, slice-и и maps

7. Условна логика и цикли

  • Изрази if
  • else и else if
  • Деклариране на променливи в условия
  • Цикли for
  • Безкрайни цикли
  • Условия на цикъла
  • break и continue
  • Итерация с range
  • Вложени цикли
  • Изрази switch
  • Switch-ове, базирани на изрази
  • Множествени случаи
  • По подразбиране (Default) случаи
  • Type switches
  • Упражнение: Имплементация на логика за валидация и обработка на приложението

8. Функции

  • Дефиниране на функции
  • Параметри на функции
  • Връщани стойности
  • Няколко връщани стойности
  • Именовани връщани стойности
  • Variadic функции
  • Анонимни функции
  • Стойности на функции
  • Затваряния (Closures)
  • Рекурсия
  • Предаване на функции като аргументи
  • Функции, връщащи грешки
  • Дизайн на малки, повторно използваеми функции
  • Упражнение: Рефакториге на съществуващ код в повторно използваеми функции

9. Показатели и концепции за памет

  • Какво е показател? (Pointer)
  • Оператори за адрес и демаркиране (dereference)
  • Показатели и параметри на функции
  • Показатели за приемане (Pointer receivers)
  • Показатели към structs
  • Nil показатели
  • Кога да се използват показатели
  • Семантика на стойност срещу семантика на референтно тавно
  • Разбиране на управлението на паметта и събирането на боклука в Go
  • Чести грешки с показатели
  • Практика: Промяна на данни на приложението с помощта на показатели

10. Създаване на уеб приложение в Go

  • Преглед на уеб възможностите на Go
  • Въведение в пакета net/http
  • Създаване на HTTP сървър
  • HTTP заявки и отговори
  • HTTP методи
  • URL-и на заявки и параметри от запита
  • HTTP заглавки
  • HTTP статусни кодове
  • Основи на маршрутизацията
  • Създаване на обработвачи (handlers)
  • Обработка на данни от формуляри
  • Сервиране на статични файлове
  • Работа с HTML шаблони
  • Променливи на шаблоните и контролни структури
  • Структуриране на уеб приложение
  • Практика: Изграждане на основен уеб сървър на Go

11. Изграждане на RESTful уеб услуга

  • Основи на REST архитектурата
  • Дизайн на API ендпоинти
  • GET, POST, PUT, PATCH и DELETE
  • Работа с JSON
  • Кодиране и декодиране на JSON
  • Валидация на заявки
  • HTTP статусни кодове
  • Отговори при грешки
  • Параметри от запита и параметри от пътя
  • Структури на API отговори
  • Разделяне на обработвачи и бизнес логика
  • Практика: Изграждане на CRUD REST API

12. Go Runtime, компилация и изграждане на проекти

  • Разбиране на Go компилатора
  • Процес на изграждане в Go
  • go run
  • go build
  • go install
  • go test
  • Флагове за изграждане
  • Конфигурация, специфична за средата
  • Изграждане за различни операционни системи и архитектури
  • Произвеждане на самостоятелни бинарни файлове
  • Управление на конфигурацията на приложението
  • Упражнение: Компилиране на приложението за множество платформи

13. Работа с файлове и уеба

  • Отваряне и затваряне на файлове
  • Четене на файлове
  • Запис на файлове
  • Създаване на директории
  • Метаданни на файлове
  • Буфериран I/O
  • Работа с потоци
  • Четене и запис на JSON файлове
  • HTTP клиенти
  • Изпращане на изходящи HTTP заявки
  • Обработка на грешки на HTTP клиентите
  • Таймауты и отмяна
  • Обработка на API отговори
  • Практика: Извличане на данни от външен API и съхраняването им локално

14. Обработка на грешки и дебъгване

  • Подходът на Go към грешките
  • Връщане на грешки от функции
  • Проверка на грешки
  • Създаване на потребителски грешки
  • Обвиване (Wrapping) на грешки
  • Добавяне на контекст към грешки
  • errors.Is и errors.As
  • Panic и recovery
  • Кога да се използва panic
  • Дебъгване на чести проблеми в Go
  • Логироване на активността на приложението
  • Използване на инструменти за дебъгване на Go
  • Упражнение: Диагностициране и поправка на умишлено въведени грешки в приложението

15. Интерфейси и абстракция

  • Какво е интерфейс?
  • Имплицитна имплементация на интерфейси
  • Дефиниране на интерфейси
  • Стойности на интерфейси
  • Празни интерфейси /u00a0any
  • Твърдения за типове (Type assertions)
  • Type switches
  • Имplementации чрез показател срещу стойност
  • Дизайн на малки интерфейси
  • Обръщане на зависимостите
  • Използване на интерфейси за тестване
  • Намаляване на свързаността на приложението
  • Практика: Въвеждане на интерфейси в примерното уеб приложение

16. Пакети и организация на проекта

  • Създаване на пакети
  • Конвенции за именуване на пакети
  • Експортирани и неекспортирани идентификатори
  • Импорт на пакети
  • Инициализация на пакети
  • Организиране на нивата на приложението
  • Вътрешни пакети (Internal packages)
  • Управление на зависимостите с Go Modules
  • Семантично версиониране
  • Използване на пакети на трети страни
  • Избягване на циклични зависимости
  • Дизайн на поддържаеми проекти на Go
  • Упражнение: Рефакториге на приложението в отделни пакети

17. Конкурентност с Goroutines

  • Какво е конкурентност?
  • Goroutines
  • Пускане на goroutines
  • Разбиране на лековесното конкурентно изпълнение
  • Предизвикателства при синхронизация
  • Споделено състояние
  • Състезателни условия (Race conditions)
  • Използване на sync.WaitGroup
  • Мютексове и мютексове за четене/писане
  • Атомарни операции
  • Практика: Преобразуване на последователна задача в конкурентна обработка

18. Канали (Channels)

  • Разбиране на каналите
  • Изпращане и получаване на стойности
  • Буфериращи срещу небуфериращи канали
  • Блокиращо поведение
  • Затваряне на канали
  • Итерация върху канали
  • Канали с посока
  • Комunikация чрез канали
  • Изрази Select
  • Таймауты и отмяна
  • Монстри на работници (Worker-pool patterns)
  • Производител/потребител (Producer/consumer patterns)
  • Практика: Изграждане на конкурентна система на работници

19. Контекст и управление на заявки

  • Защо контекстите са важни в уеб приложения
  • context.Context
  • Контекст с обхват на заявка
  • Отмяна
  • Краен срок (Deadlines)
  • Таймауты
  • Разпространение на контекста през нивата на приложението
  • Отмяна на бази данни или HTTP операции
  • Избягване на неправилно използване на контекста
  • Упражнение: Добавяне на отмяна на заявки и таймауты към уеб приложението

20. Тестване на Go приложения

  • Защо автоматизираното тестване е важно
  • Писане на unit тестове
  • Пакетът testing
  • Тестови функции
  • Конвенции за именуване на тестове
  • Тестове, базирани на таблици (Table-driven tests)
  • Тестване на грешки
  • Тестване на HTTP обработвачи
  • HTTP тестови сървъри
  • Тестови фикстури
  • Покрытие на тестове (Test coverage)
  • Бенчмарки
  • Примерни тестове
  • Тестване на интерфейси с mock-ове или fake-ове
  • Практика: Създаване на тестов набор за примерното приложение

21. Оптимизация на производителността

  • Разбиране на производителността на Go приложения
  • Идентифициране на бутлени (bottlenecks)
  • Производителност на CPU срещу памет
  • Ефективни данни структури
  • Намаляване на ненужните алокации
  • Стрингове, байтове и буфери
  • Управление на goroutines
  • Избягване на прекомерна конкурентност
  • Стратегии за кэширане
  • Разглеждане на бази данни и мрежа
  • Профилиране на приложения
  • Бенчмарки и тестване на производителност
  • Използване на инструменти за профилиране на Go
  • Упражнение: Профилиране и оптимизиране на умишлено неефективно приложение

22. Сигурност и устойчиви практики за уеб приложения

  • Валидиране на потребителския вход
  • Безопасно обработване на HTTP заявки
  • Предотвратяване на чести уеб уязвимости
  • Безопасно обработване на грешки
  • Концепции за автентикация и авторизация
  • Управление на тайни и конфигурация
  • Безопасна HTTP комуникация
  • Избягване на чувствителна информация в логовете
  • Управление и обновяване на зависимостите
  • Ограничения на ресурсите и таймауты на заявките
  • Упражнение: Преглед и засилване на сигурността на примерното API

23. Логироване и наблюдаемост на приложението

  • Основи на логироването
  • Структурирано логироване
  • Нива на лога
  • Логироване на заявки
  • Логироване на грешки
  • Корелация и ID-та на заявки
  • Мониторинг на поведението на приложението
  • Базови метрики
  • Ендпоинти за проверка на здравето (Health-check endpoints)
  • Диагностициране на производствени проблеми
  • Практика: Добавяне на структурирано логироване и проверки на здравето

24. Контейнеризиране на Go приложението

  • Защо да се използват контейнери?
  • Go приложения и контейнеризиране
  • Писане на Dockerfile
  • Многостъпкови изграждания (Multi-stage builds)
  • Изграждане на минимален runtime образ
  • Управление на конфигурацията чрез променливи на средата
  • Мрежова комуникация на контейнерите
  • Експониране на портовете на приложението
  • Пускане на приложението в контейнер
  • Тестване на контейнеризираното приложение
  • Практика: Пакетиране на примерното Go приложение като готов за производство контейнер

25. Внедряване

  • Подготовка на приложението за производство
  • Изграждане на производствени бинарни файлове
  • Конфигурация на средата
  • Внедряване чрез контейнери
  • Архитектура на внедряването
  • Обратни прокси (Reverse proxies)
  • Разглеждане на HTTPS/TLS
  • Проверки на здравето на приложението
  • Безпроблемно спиране (Graceful shutdown)
  • Обработка на сигнали от операционната система
  • Мащабиране на Go уеб приложения
  • Хоризонтално срещу вертикално мащабиране
  • Базово отстраняване на проблеми при внедряването
  • Практика: Внедряване на примерното уеб приложение

26. Capstone: Пълно Go уеб приложение

Участниците събират концепциите заедно, като разработват пълно приложение.

Проектът може да включва:

  • Инициализиране на проекта с Go Modules
  • Организация на пакети
  • HTTP маршрутизация
  • REST API ендпоинти
  • Обработка на JSON заявки и отговори
  • Валидация на входните данни
  • Обработка на грешки
  • Интерфейси
  • Конкурентна обработка
  • Комуникация с външни API
  • Перзистентност в файл или база данни
  • Автоматизирани тестове
  • Логироване
  • Разглеждане на производителността
  • Контейнеризиране
  • Производствена конфигурация
  • Внедряване

27. Преглед и добри практики

  • Преглед на основния синтаксис на Go
  • Конвенции за кодиране в Go
  • Писане на идеоматичен Go код
  • Поддържане на простота в кода
  • Ефективен дизайн на пакети
  • Добри практики за обработка на грешки
  • Принципи за дизайн на интерфейси
  • Добри практики за конкурентност
  • Стратегии за тестване
  • Разглеждане на производителността
  • Поддържаемост и четимост
  • Чести грешки на новите разработчици на Go
  • Препоръчителни подходи за продължение на Go разработката

28. Заключение

  • Преглед на ключовите концепции
  • Преглед на завършеното уеб приложение
  • Въпроси и дискусия
  • Отстраняване на проблеми с чести реални сценарии
  • Препоръчителни следващи стъпки за Go разработката
  • Допълнителни Go библиотеки и ресурси от екосистемата
  • Повече възможности за изграждане на услуги на Go, готови за производство

Изисквания

  • Разбиране на общите принципи на програмирането

Целева аудитория

  • Разработчици
 28 Часа

Брой участници


Цена за участник

Отзиви от участници (5)

Предстоящи Курсове

Свързани Kатегории