Повторение — создание утилиты
Часть раздела Логика и управление потоком путешествия по GO на Coddy. Урок 57 из 68.
Задание
ЛегкоСоздай комплексный пакет stringutil с функциями для обработки строк и продемонстрируй его использование в основной программе. Это задание проверит твою способность создавать собственный пакет утилит, реализовывать экспортируемые функции и использовать свой пакет из другой программы.
Тебе будут предоставлены два входных значения:
- Строка, содержащая спецификации функций в формате
"function1:description1,function2:description2"(например,"Reverse:reverses a string,ToUpper:converts to uppercase,ToLower:converts to lowercase") - Строка, содержащая тестовые строки, разделённые вертикальными чертами, в формате
"string1|string2|string3"(например,"hello|Go Programming|WORLD")
Твоя задача:
- Создать пакет
stringutil, объявивpackage stringutil - Разобрать первый вход, разделив его по запятым, чтобы получить отдельные спецификации функций
- Для каждой спецификации функции разделить её по двоеточиям, чтобы получить имя и описание функции
- Реализовать следующие экспортируемые функции в пакете
stringutil:Reverse(s string) string— возвращает строку с символами в обратном порядкеToUpper(s string) string— возвращает строку, преобразованную в верхний регистрToLower(s string) string— возвращает строку, преобразованную в нижний регистрLength(s string) int— возвращает длину строки
- Импортировать пакет
stringutilв основную программу - Вывести заголовок пакета:
"=== STRINGUTIL PACKAGE DEMONSTRATION ===" - Вывести доступные функции:
"Available functions in stringutil package:"- Для каждой функции из первого входа:
"- [function_name]: [description]"
- Разобрать второй вход, разделив его по вертикальным чертам, чтобы получить отдельные тестовые строки
- Вывести заголовок тестирования:
"Testing stringutil functions:" - Для каждой тестовой строки продемонстрировать все функции:
"Testing with: \"[test_string]\""" stringutil.Reverse: \"[reversed_result]\""" stringutil.ToUpper: \"[uppercase_result]\""" stringutil.ToLower: \"[lowercase_result]\""" stringutil.Length: [length_result]"
- Вычислить и вывести статистику:
"=== STATISTICS ===""Total test strings processed: [number_of_test_strings]""Functions available in package: [number_of_functions_from_first_input]""Total function calls made: [total_function_calls]"
- Вывести самую длинную и самую короткую строки:
"Longest string: \"[longest_string]\" (length: [length])""Shortest string: \"[shortest_string]\" (length: [length])"
- Вывести сообщение о завершении:
"Package demonstration completed successfully"
Используй пакет strings для разделения входных строк и обработки текста, а пакет fmt — для форматированного вывода. Для функции Reverse нужно преобразовать строку в срез рун, изменить порядок элементов на обратный и преобразовать результат обратно в строку. Помни, что все экспортируемые функции должны начинаться с заглавных букв, чтобы их можно было использовать из других пакетов. Это задание демонстрирует, как создавать повторно используемые пакеты утилит и объединять в них связанную функциональность.
Попробуйте сами
package main
import (
"bufio"
"fmt"
"os"
"strings"
)
// TODO: Создайте здесь функции пакета stringutil
// Поскольку мы не можем использовать отдельные файлы, определите функции прямо здесь
// Обычно они находились бы в отдельном файле пакета
// func Reverse(s string) string {
// // Преобразуйте в руны, разверните, затем преобразуйте обратно в строку
// }
// func ToUpper(s string) string {
// // Используйте strings.ToUpper
// }
// func ToLower(s string) string {
// // Используйте strings.ToLower
// }
// func Length(s string) int {
// // Верните len(s)
// }
func main() {
// Считайте ввод с помощью bufio.Scanner, чтобы правильно обрабатывать пробелы
scanner := bufio.NewScanner(os.Stdin)
scanner.Scan()
functionSpecs := scanner.Text()
scanner.Scan()
testStrings := scanner.Text()
// Разберите спецификации функций
funcList := strings.Split(functionSpecs, ",")
// Разберите тестовые строки
testList := strings.Split(testStrings, "|")
// TODO: Напишите свой код ниже
// 1. Выведите заголовок пакета
// 2. Выведите доступные функции из funcList (проверьте длину массива)
// 3. Проверьте все функции на каждой тестовой строке
// 4. Вычислите и выведите статистику
// 5. Найдите и выведите самую длинную и самую короткую строки (проверьте, есть ли элементы в testList)
// 6. Выведите сообщение о завершении
// Не забудьте использовать функции вашего пакета stringutil, например:
// Reverse(testString)
// ToUpper(testString)
// ToLower(testString)
// Length(testString)
}Все уроки раздела Логика и управление потоком
1Продвинутое управление потоком
Оператор switch с `fallthrough`Выход из вложенных цикловПереход к следующей итерации конкретного циклаОператор `goto`Повторение: расширенное управление циклами4Проект: простой список задач
Настройка проектаДобавление задачи2Структуры и методы
Определение методов для структурПолучатели-значенияПолучатели-указателиВыбор получателейМетоды и функцииПовторение: поведение структур5Карты: подробный разбор
Карты структурУказатели как значения картПроверка карт на nilСравнение картПовторение — счётчик частоты слов8Проект: простой складской учёт
Обзор проектаПроверка запасов3Интерфейсы (основы)
Что такое интерфейс?Определение интерфейсаРеализация интерфейсаИспользование типов интерфейсовПустой интерфейсУтверждения типовПереключатель типовПовторение — формы и поведение6Идиоматический Go: множества
Идиома множества в GoСоздание множестваДобавление элементов в множествоПроверка наличия элементаУдаление элемента из множестваПеребор элементов множестваПовторение — уникальные имена пользователей9Пакеты и область видимости
Что такое пакет?Экспортируемые и неэкспортируемыеСоздание простого пакетаПсевдонимы пакетовПустой идентификатор `_`Функция `init`Повторение — создание утилитыПотренируйтесь самостоятельно: Онлайн-компилятор Go