> For the complete documentation index, see [llms.txt](https://s0xzwasd.gitbook.io/learn-go-with-tests-ru/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://s0xzwasd.gitbook.io/learn-go-with-tests-ru/gb-readme.md).

# Изучение Go через тестирование

![Три гофера разных цветов: один думает о еде, другой готовит, третий убирает. Надпись: Red, Green, Refactor.](/files/GVgSaXYvXKOctRLbW7em)

[Обложка нарисована 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)

## Доступные переводы

* [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)
* [Купите чашку кофе ](https://www.buymeacoffee.com/quii)
* [Поддержите проект на GitHub](https://github.com/sponsors/quii)

## Почему мне стоит это читать?

* Узнайте о языке Go с помощью написания тестов.
* **Погрузитесь в TDD с головой**. Go хороший язык для этого, потому-что он прост для изучения и в нём отлично реализованы тесты из коробки.
* Получите уверенность, что вы можете писать надежные и хорошо протестированные системы на Go.
* [Посмотрите видео или почитайте](/learn-go-with-tests-ru/dopolnitelno/why.md), почему юнит-тестирование и TDD важны.

## Обо мне

У меня есть опыт обучения 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](https://github.com/s0xzwasd/learn-go-with-tests-ru/blob/main/LICENSE.md)
