https://github.com/vasnake/golang-web_services-mrg_course
Go language course from MRG
https://github.com/vasnake/golang-web_services-mrg_course
go gollang services study web webservices
Last synced: about 2 months ago
JSON representation
Go language course from MRG
- Host: GitHub
- URL: https://github.com/vasnake/golang-web_services-mrg_course
- Owner: vasnake
- License: gpl-3.0
- Created: 2021-05-14T07:54:56.000Z (about 4 years ago)
- Default Branch: main
- Last Pushed: 2024-05-22T12:43:26.000Z (12 months ago)
- Last Synced: 2024-05-22T12:55:38.794Z (12 months ago)
- Topics: go, gollang, services, study, web, webservices
- Language: Go
- Homepage:
- Size: 55.5 MB
- Stars: 2
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Разработка веб-сервисов на Go
[Разработка веб-сервисов на Golang (Go), Василий Романов, stepik](https://stepik.org/187490)
Этот курс был создан в 2017 году на основе внедрения языка Go в Почту Mail.ru3 части, 12 недель
- [part1](part1.md) week 1..4
- [part2](part2.md) week 5..8
- [part3](part3.md) week 9..12## silly-bus
https://stepik.org/course/187490/syllabus
### Неделя 1 - основы языка, Часть 1
- 1.1 Правила, чат поддержки, код к лекциям и домашние задания
- 1.2 Начало работы
- 1.3 Основы языка
- 1.4 Функции
- 1.5 Структуры и методы
- 1.6 Интерфейсы
- 1.7 Практический пример - программа уникализации с тестами
- 1.8 Задание 1 - программа вывода дерева файловНеделя 2 - асинхронная работа, Часть 1
- 2.1 Методы обработки запросов
- 2.2 Горутины и каналы
- 2.3 Инструменты для многопроцессорного программирование
- 2.4 Состояние гонки
- 2.5 Задание 2 - асинхроннй пайплайнНеделя 3 - json и бенчмарки, Часть 1
- 3.1 JSON
- 3.2 Работа с динамическими данными
- 3.3 Бенчмарки и производительность
- 3.4 Задание 3 - оптимизация кодаНеделя 4 - основы работы с HTTP, Часть 1
- 4.1 Слушаем сетевое соединение
- 4.2 Обработка HTTP-запросов
- 4.3 Шаблонизация
- 4.4 Профилирование веба
- 4.5 Телеграм бот
- 4.6 Задание 4 - тестовое покрытие для сервиса поиска по XML### Неделя 5 - продолжаем работу с HTTP, Часть 2
- 5.1 Приветствие
- 5.2 Middleware
- 5.3 Роутинг http-запросов
- 5.4 Валидация входящих данных
- 5.5 Фреймворки
- 5.6 Логирование
- 5.7 Веб-сокеты
- 5.8 Шаблонизация
- 5.9 Задание 5 - веб-фреймворк на основе кодогенерацииНеделя 6 - базы данных, Часть 2
- 6.1 SQL
- 6.2 KV-хранилища
- 6.3 Rabbit, Mongodb
- 6.4 Задание 6 - универсальный сервис просмотра содержимого БДНеделя 7 - основы микросервисов, Часть 2
- 7.1 Что такое микросервис
- 7.2 Делаем микросервис руками
- 7.3 protobuf и gRPC
- 7.4 Дополнительные темы
- 7.5 Задание 7 - асинхронная система логированияНеделя 8 - прочие темы, Часть 2
- 8.1 Конфигурирование сервиса
- 8.2 Мониторинг
- 8.3 Низкоуровневое программирование
- 8.4 Инструменты для статического анализа
- 8.5 Задание 8 - заполнение полей структуры через рефлексию### Неделя 9 - архитектура приложения, Часть 3
- 9.1 Структурируем приложение
- 9.2 Тестируем комплексное приложение
- 9.3 Авторизация и пароли
- 9.4 CSRF-токены
- 9.5 Сессии
- 9.6 Задание 9 - архитектура типового приложенияНеделя 10 - oauth и рефакториг приложения, Часть 3
- 10.1 OAuth
- 10.2 Немного рефакторинга
- 10.3 Проектирование API
- 10.4 Задание 10 - телеграм ботНеделя 11 - graphql, Часть 3
- 11.1 Основы GraphQL
- 11.2 GraphQL - интеграция в проект
- 11.3 Организация пакетов в приложении
- 11.4 Задание 11 - маркетплейс на основе GraphQLНеделя 12 - сборка, s3 и трейсинг, Часть 3
- 12.1 Сборка docker-контейнера
- 12.2 Хранение файлов в проекте через S3
- 12.3 Конфигурирование приложения
- 12.4 Трейсинг запросов
- 12.5 Обратная связь
- 12.6 Задание 12 - многопользовательская MUD на основе асинхрона## source code
> Код ко всем лекциями можно скачать по следующей ссылке:
- https://stepik.org/media/attachments/lesson/1177827/golang_web_services_2023-12-28.zip
- https://stepik.org/media/attachments/lesson/1177827/golang_web_services_2024-04-26.zip> Данный код проверен на версии языка go 1.20.
В папке каждой недели есть домашка, она находится в подпапке `99_hw`.
При работе с консолью пользуйтесь Bash.Я уже скачал (доступные версии):
- [handouts/golang_web_services_2023-12-28.zip](./handouts/golang_web_services_2023-12-28.zip)
- [handouts/golang_web_services_2024-04-26.zip](./handouts/golang_web_services_2024-04-26.zip)У меня винда11 и WSL, поэтому я себе сделал такой раннер для кода:
```hs
pushd /mnt/c/Users/${LOGNAME}/data/github/golang-web_services-mrg_course/sandbox
alias gr='bash -vxe /mnt/c/Users/${LOGNAME}/data/github/golang-web_services-mrg_course/run.sh'
# всё запускаемое можно найти в скрипте
```
bash## extra homework
Относится ко всем "домашкам": реализован только необходимый минимум.
Тесты зеленые и ладно. Надо бы сделать "правильно":
> make it work, make it right, make it fast.### float numbers
> Numeric constants represent exact values of arbitrary precision and do not overflow.
Consequently, there are no constants denoting the IEEE-754 negative zero, infinity, and not-a-number values.Напиши библиотечные функции:
- Предикат `IsInvalidFloat`, используемый в фильтрации коллекции чисел. Инвалид: inf, nan
- Сравнения двух чисел float, с учетом дельты, +/- zero, nan, +/- inf### int numbers bits
> Two's complement is achieved by:
- Step 1: starting with the equivalent positive number.
- Step 2: inverting (or flipping) all bits – changing every 0 to 1, and every 1 to 0;
- Step 3: adding 1 to the entire inverted number, ignoring any overflow.Напиши отображение 32-бит числа в int32, uint32. Битовое представление не меняется, меняется интерпретация набора бит.
Рассмотри два случая: int32 получен как результат хеширования
и 1) надо отобразить диапазон значений на uint32. 2) надо сохранить битовое представление.Напиши конвертеры: (u)int => bitstring, bitstring => u(int).
### concurrency patterns
Напиши параллельную обработку по трем паттернам https://habr.com/ru/companies/timeweb/articles/770912/
### week 2, dynamic workers pool
[week 2, extra homework](./sandbox/week02_homework/wp_extra/wp_extra.md)
### week 4, search in XML
[week 4, extra homework](./part1.md#week4-homework)
Часть задания, в которой надо реализовать поиск "юзеров" в файле XML, согласно переданным параметрам.### week 6, db_explorer
[week 6, homework](./part2.md#week6-homework)
Сделан только необходимый минимум. Надо бы навести красоту, отрефакторить, поработать над эффективностью, валидацией.
Добавить поддержку большего количества кейсов (типов данных, комбинаций параметров колонок).### week 9, rwa
[week 9, homework](./part3.md#week9-homework)
Сделан только необходимый минимум. Надо бы сделать "правильно" и с прицелом на масштабируемость.### цуулы 10 .. 12
Сделан только необходимый минимум. Надо бы сделать "правильно" и с прицелом на масштабируемость.
## Info, links
- `Communicating Sequential Processes` by Tony Hoare
- https://cs.stanford.edu/people/eroberts/courses/soco/projects/2008-09/tony-hoare/csp.html
- http://www.usingcsp.com/cspbook.pdf
- CSP vs Actor model (channels vs actor/mailbox)
- [If a map isn’t a reference variable, what is it?](https://dave.cheney.net/2017/04/30/if-a-map-isnt-a-reference-variable-what-is-it)
- [Implementing a bignum calculator with Rob Pike](https://youtu.be/PXoG0WX0r_E)
- [Lexical Scanning in Go - Rob Pike](https://www.youtube.com/watch?v=HxaD_trXwRE)
- [Advanced Topics in Programming Languages: Concurrency/message passing Newsqueak](https://youtu.be/hB05UFqOtFA), prime sieve on channels
- [3.5 Years, 500k Lines of Go (Part 1)][https://npf.io/2017/03/3.5yrs-500k-lines-of-go/] `return fmt.Errorf("While doing foo: %v", err.Error())`
- The Go Playground https://go.dev/play/ or https://play.golang.com/
- Practical Go: Real world advice for writing maintainable Go programs / Dave Cheney https://www.google.com/search?q=Practical+Go%3A+Real+world+advice+for+writing+maintainable+Go+programs+%2F+Dave+Cheney
- http routing benchmark https://github.com/julienschmidt/go-http-routing-benchmark
- grpc, фреймворк использующий protobuf https://grpc.io/
- https://blog.carlana.net/post/2016-11-27-how-to-use-go-generate/
- How to include Git version information in Go https://blog.carlana.net/post/2023/golang-git-hash-how-to/
- Василий Романов, Как Стать Синьером https://youtu.be/gqJfANPrNm4?feature=shared
- Василий Романов, Уроки Проекта с Коммитом 2001 г. https://youtu.be/bK775SnBA-I?feature=shareddocker
- https://docs.docker.com/compose/environment-variables/variable-interpolation/#substitute-with---env-file
- https://docs.docker.com/compose/environment-variables/variable-interpolation/#env-file-syntax
- https://stackoverflow.com/questions/20635472/using-the-run-instruction-in-a-dockerfile-with-source-does-not-work
- https://docs.docker.com/compose/use-secrets/
- https://docs.docker.com/compose/compose-file/09-secrets/
- https://docs.docker.com/reference/dockerfile/
- https://docs.docker.com/reference/cli/docker/image/build/
- https://dev.to/mjnaderi/accessing-host-services-from-docker-containers-1a97
- https://stackoverflow.com/questions/24319662/from-inside-of-a-docker-container-how-do-i-connect-to-the-localhost-of-the-machmake
- https://www.gnu.org/software/make/manual/html_node/Using-Variables.html
- https://gist.github.com/mihow/9c7f559807069a03e302605691f85572### vscode hints
User settings: `~\AppData\Roaming\Code\User\settings.json`
```json
...
"gopls": {
"ui.diagnostic.analyses": {
"stringintconv": false,
"printf": false
}
},
"go.vetFlags": [
"-printf=false"
],
"go.lintFlags": [
"-stringintconv=false"
],
...
```
snippets- add cursors: CTRL+SHIFT+L https://code.visualstudio.com/docs/editor/codebasics#_multiple-selections-multicursor