Это детальное описание решения. Оно предназначено для людей без опыта, чтобы поменьше думать над алгоритмом, а преобразовывать описание в код.

Если у вас есть опыт разработки - вам лучше это не читать, иначе для вас роста не будет.

Далее идет много пустых строк чтобы вы случайно не увлеклись чтением если у вас есть опыт.

Даже если вы хотите делать по описанию - почитайте сначала спойлеры в основном ридми. Я буду на них в дальнейшем.










Предполгается что вы внимательно изучили задание, посмотрели код клиента, внимательно прочитали раздел "Рекомендуемый план работы" в описании задания.



























Идем по рекомендуемому плану работ:

1. Напишите в функции main код который просто по фиксированным параметрам реализует логику SearchServer и выводит в консоль, без http

* начните с объявления переменных с параметрами - пока они просто переменыне, а не приходят из запроса
* потом прочитайте файл с данными (см пакет https://golang.org/pkg/os) и распарсите XML (читайте доку по xml.Unmarshal), можете воспользоваться https://www.onlinetool.io/xmltogo/ для помощи в формировании структуры, но помните что вам не нужны все поля. Не забывате проверять везде ошибки, за игнорирование ошибок буду отправлять доделывать
* теперь реализуйте сортировку, sort.Slice вам в помощь - там может быть большой switch-case 
* в конце - применение limit-offset - тут просто операция со слайсом

2. Теперь оформите ваш код в http-хендлер, параметры уже не хардкодом, а берите из запроса

* берем весь ваш код и заворачиваем в функцию SearchServer, которую регистрируем в http.HandleFunc и запускаем сервер
* надо сделать чтобы результат писался в JSON в хттп-ответ (в `w http.ResponseWriter` который идет первым параметром вашей функции) 
* из браузера должно заработать и вернуть вам жсон

3. Проверьте запросами из браузера что код отрабатывает

* ранее вы возвращали по жестко фиксированным параметрам данные
* сделайте так чтобы эти параметры теперь определялись из GET-параметров (`4/http/get.go`)
* проверьте руками что вывод функции меняется в зависимоти от измененного параметра

4. Теперь начинайте писать тесты в client_test.go
5. Реализуйте сначала один тест, который просто делает запрос через SearchClient-а в ваш хттп-хендлер, запущенный через тестовый сервер 

* Напишите тестовую функцию, которая просто ничего не делает - запустите `go test -v` ее чтобы понять что вообще оно отработало
* Поднимите SearchServer в тестовом сервере ( см пример в `4/http/server_test.go`)
* Урл от тестового сервера передайте в SearchClient
* выполните метод FindUsers и проверьте что вам вернулся ожидаемый результат

6. Теперь постройте отчет и смотрите какой код у вас был вызван, а какой нет

* выполните указанную в основном тексте задания команду, посмотрите какой код в client.go красный

7. Начинайте дописывать тест кейсы

* Теперь вам нужен слайс тест-кейсов как в `4/http/server_test.go`
* дополняйте его разными параметрами чтобы покрыть побольше кода
* У вас должно получиться все, кроме ошибок

8. Для ошибок реализуйте отдельный хендлер или хендлеры

* У вас будет несколько видов ошибок - клиентские в которых не будет запроса на сервер - они все могут получиться передачей нужны параметров в функцию - для этого у вас будет один или несколько отдельных тестов
* Обратите внимание - `unknown error` - клиентская ошибка - какой параметр можно покрутить чтобы ее получить?
* следующая категория ошибок - серверные - это ошибки которые приходят к вам при обращении во внешнюю систему (в ваш SearchServer)
* тут можно написать отдельный SearchServerErrors по аналогии с `4/http/server_test.go` - он будет эмулировать вам ошибки
* И в завершении у вас будет еще тестовая функция, которая будет уже через табличное тетсирование (слайс тест кейсов) обращаться в SearchServerErrors для получения нужных ошибок

По итогу у вас должно получиться 100% покрытия в client.go, но видно это будет в отчете, а не при запуске команды в консоли - потому что в том покрытии учитывается еще и SearchServer из main.go.

Если вам  понравилось - вы можете довести покрытие до 100% вообще - вынесите SearchServer в main.go и допишите тесты для этой функции






