Итоги: создание утилиты
Часть раздела Логика и управление потоком путешествия по 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 вам потребуется преобразовать строку в срез рун (slice of runes), изменить порядок на обратный и преобразовать обратно в строку. Помните, что все экспортируемые функции должны начинаться с заглавной буквы, чтобы быть доступными из других пакетов. Эта задача демонстрирует, как создавать переиспользуемые пакеты утилит и организовывать связанную функциональность вместе.
Попробуйте сами
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Сравнение картИтоги: счетчик частоты слов3Интерфейсы (Основы)
Что такое интерфейс?Определение интерфейсаРеализация интерфейсаИспользование интерфейсных типовПустой интерфейсУтверждение типаПереключатель типовИтоги: Фигуры и поведение6Идиоматичный Go: Множества
Идиома множества в GoСоздание множестваДобавление в множествоПроверка наличия элементаУдаление из множестваИтерация по множествуИтоги — Уникальные имена пользователей9Пакеты и область видимости
Что такое пакет?Экспортируемые и неэкспортируемые элементыСоздание простого пакетаПсевдонимы пакетовПустой идентификатор `_`Функция `init`Итоги: создание утилиты