Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/s0xzwasd/learn-go-with-tests-ru
Перевод книги «Learn Go with Tests» на русский язык. Russian translation of Learn Go with Tests.
https://github.com/s0xzwasd/learn-go-with-tests-ru
go golang tdd translation
Last synced: 24 days ago
JSON representation
Перевод книги «Learn Go with Tests» на русский язык. Russian translation of Learn Go with Tests.
- Host: GitHub
- URL: https://github.com/s0xzwasd/learn-go-with-tests-ru
- Owner: s0xzwasd
- License: mit
- Created: 2021-11-25T06:34:48.000Z (about 3 years ago)
- Default Branch: main
- Last Pushed: 2023-02-24T23:07:00.000Z (almost 2 years ago)
- Last Synced: 2024-11-13T15:24:56.447Z (3 months ago)
- Topics: go, golang, tdd, translation
- Language: Go
- Homepage: https://s0xzwasd.gitbook.io/learn-go-with-tests-ru/
- Size: 7.85 MB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- Contributing: contributing.md
- Funding: .github/FUNDING.yml
- License: LICENSE.md
Awesome Lists containing this project
README
# Изучите Go через тестирование
![]()
[Обложка нарисована Denise](https://twitter.com/deniseyu21)
[![Go Report Card](https://goreportcard.com/badge/github.com/quii/learn-go-with-tests)](https://goreportcard.com/report/github.com/quii/learn-go-with-tests)
## Форматы для чтения
- [Gitbook](https://s0xzwasd.gitbook.io/learn-go-with-tests-ru/)
- [EPUB or PDF](https://github.com/s0xzwasd/learn-go-with-tests/releases)## Доступные переводы
- [English](https://quii.gitbook.io/learn-go-with-tests)
- [中文](https://studygolang.gitbook.io/learn-go-with-tests)
- [Português](https://larien.gitbook.io/aprenda-go-com-testes/)
- [日本語](https://andmorefine.gitbook.io/learn-go-with-tests/)
- [한국어](https://miryang.gitbook.io/learn-go-with-tests/)
- [Türkçe](https://halilkocaoz.gitbook.io/go-programlama-dilini-ogren/)## Поддержите меня
Я горжусь тем, что предлагаю эту книгу для свободного использования, бесплатно. Однако, если вы хотите поддержать меня или выразить благодарность, то можете воспользоваться следующими пунктами:
- [Отметьте меня в Твиттере: @quii](https://twitter.com/quii)
- [Купите чашку кофе :coffee:](https://www.buymeacoffee.com/quii)
- [Поддержите проект на GitHub](https://github.com/sponsors/quii)## Почему мне стоит это читать?
* Узнайте о языке Go с помощью написания тестов.
* **Погрузитесь в TDD с головой**. Go хороший язык для этого, потому-что он прост для изучения и в нём отлично реализованы тесты из коробки.
* Получите уверенность, что вы можете писать надежные и хорошо протестированные системы на Go.
* [Посмотрите видео или почитайте](why.md), почему юнит-тестирование и TDD важны.## Оглавление
### Основы Go
1. [Установка Go](install-go.md) - Настройте рабочее окружение для комфортной работы.
2. [Привет, мир!](hello-world.md) - Объявляйте переменные, константы, используйте ветвления, напишите вашу первую программу на Go и тест для неё. Синтаксис подтестов и замыканий.
3. [Числа](integers.md) - Укрепите знания синтаксиса для функций и изучите новые пути улучшения документации вашего кода.
4. [Циклы](iteration.md) - Узнайте о цикле `for` и для чего нужны бенчмарки.
5. [Массивы и Слайсы](arrays-and-slices.md) - Научитесь работать с массивами, слайсами, `len`, `range`, изучите вариативные функции и покройте тестами программу.
6. [Структуры, методы и интерфейсы](structs-methods-and-interfaces.md) - Погрузитесь в методы, узнайте об интерфейсах, структурах и табличных тестах.
7. [Указатели и ошибки](pointers-and-errors.md) - Узнайте об указателях и обработке ошибок в Go.
8. [Карты](maps.md) - Научитесь пользоваться картами для хранения данных.
9. [Управление зависимостями](dependency-injection.md) - Получите представления об управлении зависимости и как это связано с использованием интерфейсов и пакета `io`.
10. [Мокинг (имитация)](mocking.md) - Возьмите существующий не протестированный код и используйте DI с мокингом для написания тестов.
11. [Многопоточность](concurrency.md) - Узнайте как писать многопоточный код и как сделать вашу программу быстрее.
12. [Оператор Select](select.md) - Научитесь красиво и элегантно синхронизировать асинхронные процессы.
13. [Рефлексия](reflection.md) - Получите основы о рефлексии в Go.
13. [Синхронизация](sync.md) - Узнайте о пакете `sync`, который включает в себя `WaitGroup` и `Mutex`.
13. [Использование context](context.md) - Используйте пакет `context` для управления и закрытия долгих процессов.
14. [Property-based testing (использование предикатов)](roman-numerals.md) - Попрактикуйтесь в TDD с помощью Roman Numerals заданий и получите основы PBT.
15. [Использование math](math.md) - Научитесь использовать пакет `math` и нарисуйте часы с использованием SVG.
16. [Чтение файлов](reading-files.md) - Читайте файлы и обрабатывайте их.### Создание приложения
После погружения в Go пришло время написать свое собственное приложения, используя полученные знания о большинстве важных аспектов языка и как применять TDD.
Каждая глава построена по принципу итеративности и зависит от предыдущей. Приложение обрастает новыми функции шаг за шагом.
Новые понятия будут представлены, чтобы научиться писать качественный код, но большинство материала будет зависеть от стандартных библиотек языка, которые были в предыдущей главе.
В конце главы вы получите полное представление о том, как писать программы на языке Go, покрытые при этом тестами, что особенно требуется для любого серьезного приложения.
* [HTTP-сервер](http-server.md) - Мы создадим приложение, которое получает HTTP-запросы и отвечает на них.
* [JSON, маршрутизация и вложения](json.md) - Мы создадим наши собственные запросы, которые возвращают JSON и разберемся как устроена маршрутизация HTTP-запросов.
* [IO и сортировка](io.md) - Мы сохраним и прочитаем наши данные с диска и научимся эти данные сортировать.
* [Командная строка и структура проекта](command-line.md) - Используем нашу кодовую базу для нескольких приложений и прочитаем ввод из командной строки.
* [Пакет time](time.md) - Установим активности на определенный период времени с помощью пакета `time`.
* [Веб-сокеты](websockets.md) - Узнаем как написать и протестировать сервер, который использует веб-сокеты.### Частые вопросы и ответы
Я часто сталкиваюсь с популярным вопросом от моих студентов:
> Как я могу протестировать функцию, которая сначала делает x, затем y, а в конце z?
Если у вас есть подобные вопросы – заведите новый тикет на GitHub и я постараюсь найти время и написать маленькую главу о том, как решить эту проблему. Я чувствую, что такой контент ценнее, поскольку это настоящие проблемы вокруг тестирования.
* [Вызовы OS-команд](os-exec.md) - Пример как мы можем вызывать OS-команды для того, чтобы получить данные и сохранить нашу бизнес-логику способной для тестирования.
* [Создание собственных ошибок](error-types.md) - Пример как мы можем создавать собственные ошибки, чтобы улучшить тесты и сделать код удобным для дальнейшей работы.
* [Context-независимый Reader](context-aware-reader.md) - Узнаем как TDD дополняет `io.Reader` с отменой. Основываясь на статье ["Context-aware io.Reader for Go"](https://pace.dev/blog/2020/02/03/context-aware-ioreader-for-golang-by-mat-ryer).
* [Проектирование HTTP-хандлеров](http-handlers-revisited.md) - Тестирование HTTP-хандлеров кажется болью для большинства разработчиков. Мы найдем основные проблемы и научимся проектировать HTTP-хандлеров правильно.### Дополнения / Обсуждения
* [Почему?](why.md) - Посмотрите видео или почитайте о том, почему юнит-тестирование и TDD важны.
* [Введение в дженерики](intro-to-generics.md) - Научитесь как писать функции которые принимают аргументы с дженериками и напишите свою собственную структуру данных.
* [Анти-паттерны](anti-patterns.md) - Маленькая глава об анти-паттернах в TDD и юнит-тестировании.## Внести свой вклад в развитие проекта
* Данный _проект находится в стадии разработки_, поэтому не стесняйтесь связаться и предложить свои идеи.
* Прочитайте как правильно [контрибьютить](https://github.com/quii/learn-go-with-tests/tree/842f4f24d1f1c20ba3bb23cbc376c7ca6f7ca79a/contributing.md) в проект.
* Есть идеи? Создайте новый запрос!## Обо мне
У меня есть опыт обучения Go для разработчиков и я попробовал разные пути: от команды, которая просто интересуется Go, до написания высокоэффективных систем на языке.
### Не работающие подходы
#### Прочитать книгу
Мы пробовали применить подход, который обсуждался в [синей книге](https://www.amazon.co.uk/Programming-Language-Addison-Wesley-Professional-Computing/dp/0134190440) и каждую неделю обсуждать следующую главу вместе с решением задач.
Мне нравится эта книга, но она требует высокий уровень вовлеченности. Эта книга детально описывает концепты, которые в целом полезны, но это значит что прогресс будет медленным и незаметным – это не для всех.
Небольшое количество людей хотело бы прочитать главу X и решать задачу, при этом большинство людей этого не делали.
#### Решать часть задач
Решение задач интересное занятие, но обычно их полезность довольна мала при изучении языка. Мы вряд ли будем использовать горутины для решения каких-то задач.
Другая проблема, когда у вас есть несколько уровней энтузиазма. Некоторые люди просто хотят изучить больше концепций языка чем другие и, когда они показывают что они уже сделали, то заканчивают особенностями языка, о котором другие не знают.
Это создает в обучении проблемы, вызывает не структурированность и отсутствие документации, тестов.
### Работающие подходы
До этого момента самый эффективный путь был медленно изучать основы языка с помощью [go by example](https://gobyexample.com/), пробовать их запустить локально и смотреть на общую картину. Это немного более интерактивный подход, чем "прочитай главу X и выполни домашнее задание".
После этого вы получаете прочную базу по грамматике языка и поэтому можете начать проектировать какие-либо системы.
Это можно сравнить с практикой игры на гитаре, когда вы начинаете изучать гаммы и как их играть.
При этом не важно насколько вы артистичны, так как вряд ли вы напишите хорошую музыку без понимания основ и практики игры.
### Работающие подходы для меня
Когда я изучаю новый язык программирования, я обычно начинаю с каких-то примеров кода и запускаю их в песочнице, но в основном я приверженец определенной структурированности.
Я бы хотел изучить основные концепты и затем укрепить их с помощью идей с тестами. Тесты подтверждают, что мой код корректен и документируют особенности, которые я изучил.
Из моего опыта обучения с группой или самостоятельно, я пытаюсь попробовать создать что-то, что может быть полезно другим разработчикам и командам. Написание маленьких тестов поможет улучшить ваши навыки в проектировании программного обеспечения и даст основы для новых высокоэффективных систем.
## Для кого эта книга
* Любому, кто заинтересовался в изучении Go.
* Любому, кто уже немного знаком с Go, но хочет изучить TDD подход.## Что мне потребуется для прохождения?
* Компьютер и установленный терминал, которым вы хорошо пользуетесь.
* Установленный [Go](https://golang.org/).
* Текстовый редактор кода.
* Небольшие познания в программировании. Понимание концепции ветвлений, что такое переменная, функция и т.д## Обратная связь
* Создавайте новые тикеты/предлагайте изменения [здесь](https://github.com/s0xzwasd/learn-go-with-tests) или отметьте меня в [Twitter](https://twitter.com/quii).
[Лицензия MIT](LICENSE.md)
[Логотип нарисовал egonelbre](https://github.com/egonelbre), спасибо!