Введение
В этом проекте вы научитесь реализовывать интерпретатор комментариев JSON. Это полезная функция при работе с файлами конфигурации JSON, так как позволяет добавлять комментарии для объяснения причины определенных настроек.
👀 Предварительный просмотр
$ /usr/local/go/bin/go test
PASS
ok jsonex 0.002s
🎯 Задачи
В этом проекте вы научитесь:
- Как инициализировать модуль Go и настроить необходимую среду
- Как реализовать функцию разбора комментариев JSON, которая поддерживает символ
#в качестве комментария - Как обрабатывать случаи, когда символ
"является частью содержимого строки - Как протестировать функцию разбора комментариев JSON
🏆 Достижения
После завершения этого проекта вы сможете:
- Разобраться, как работать с модулями Go и настраивать разработочную среду
- Реализовать пользовательский парсер JSON, поддерживающий комментарии
- Писать тесты для гарантии правильности функции разбора комментариев JSON
- Применить свои новые знания для улучшения файлов конфигурации на основе JSON с информативными комментариями
Инициализировать проект
В этом шаге вы научитесь инициализировать проект и настроить необходимую среду. Следуйте шагам ниже, чтобы выполнить этот шаг:
Откройте терминал и перейдите в каталог
/home/labex/project.Инициализируйте модуль Go с помощью следующей команды:
/usr/local/go/bin/go mod init jsonexУстановите необходимые пакеты, выполнив следующую команду:
/usr/local/go/bin/go get github.com/stretchr/testify/assert
Реализовать функцию разбора комментариев JSON
В этом шаге вы научитесь реализовывать функцию разбора комментариев JSON. Следуйте шагам ниже, чтобы выполнить этот шаг:
Откройте файл
jsonex.goв редакторе.Функция
Unmarshalразбирает JSON закодированные данные и сохраняет результат.- Поддерживать
#в качестве символа комментария в JSON, и все, что находится после этого символа, должно считаться комментарием. - Когда
"является частью содержимого строки, она должна быть представлена в виде\", а\должен быть представлен в виде\\.
- Поддерживать
Реализовать функцию
trimCommentsLine, чтобы проверить, является ли строка комментарием или нет. Если это не комментарий, вернуть саму строку.Полный код функции
trimCommentsLineдолжен быть следующим:// trimCommentsLine проверяет, является ли строка комментарием или нет, если нет, возвращает саму строку func trimCommentsLine(line []byte) []byte { var newLine []byte var i, quoteCount int lastIdx := len(line) - 1 for i = 0; i <= lastIdx; i++ { // если символ '\' if line[i] == '\\' { // если индекс не последний, проверить, является ли следующий символ '"' или '\', если да, добавить его if i!= lastIdx && (line[i+1] == '\\' || line[i+1] == '"') { newLine = append(newLine, line[i], line[i+1]) i++ continue } } // если символ '"', увеличить quoteCount if line[i] == '"' { quoteCount++ } // если символ '#' if line[i] == '#' { // если quoteCount четное, прервать, потому что '#' не находится в строке, // находится в комментарии if quoteCount%2 == 0 { break } } newLine = append(newLine, line[i]) } return newLine }
Тестировать функцию разбора комментариев JSON
В этом шаге вы научитесь тестировать функцию разбора комментариев JSON. Следуйте шагам ниже, чтобы выполнить этот шаг:
Откройте терминал и перейдите в каталог
/home/labex/project.Выполните следующую команду для запуска тестов:
cd /home/labex/project /usr/local/go/bin/go testЕсли тесты пройдены, вы увидите следующий вывод:
PASS ok jsonex 0.002sЕсли вы столкнулись с ошибкой по таймауту, выполните следующие команды в терминале, а затем нажмите кнопку "Проверить снова", чтобы пройти проверку:
cd /home/labex/project /usr/local/go/bin/go test
Поздравляем! Вы успешно реализовали функцию разбора комментариев JSON и протестировали ее. Теперь вы можете использовать эту функцию в своем проекте.
Резюме
Поздравляем! Вы завершили этот проект. Вы можете практиковаться в более многих лабораторных работах в LabEx, чтобы улучшить свои навыки.



