Создание простого пакета
Часть раздела Логика и управление потоком путешествия по GO на Coddy — урок 53 из 68.
Пришло время создать свой собственный пользовательский пакет! Создание пакетов позволяет организовать ваш код в переиспользуемые модули, которые можно импортировать и использовать в различных программах.
Чтобы создать пакет, вы начинаете с его объявления в верхней части файла с помощью ключевого слова package, за которым следует имя пакета. Для нашего пакета калькулятора мы будем использовать:
package calculatorВнутри этого пакета вы можете определять функции, переменные и типы. Помните, что только экспортируемые идентификаторы (те, что начинаются с заглавной буквы) будут доступны из других пакетов. Вот как можно определить экспортируемую функцию Add:
package calculator
func Add(a, b int) int {
return a + b
}Чтобы использовать ваш пользовательский пакет из другого файла, вы импортируете его так же, как и любой другой пакет. Из вашего пакета main вы затем сможете вызывать экспортированные функции:
package main
import "calculator"
func main() {
result := calculator.Add(5, 3)
}Этот модульный подход делает ваш код более организованным и позволяет повторно использовать функциональность в нескольких программах без дублирования кода.
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Задание
ЛегкоСоздайте собственный пакет mathutils с базовыми математическими операциями, а затем используйте его в своей основной программе. Эта задача проверит ваше умение создавать пакеты, определять экспортируемые функции и импортировать собственный пакет для использования в другой программе.
Вы получите два входных значения:
- Строка, содержащая определения функций в формате
"function1:param1,param2:operation|function2:param1,param2:operation"(например,"Add:5,3:addition|Multiply:4,7:multiplication|Subtract:10,4:subtraction") - Строка, содержащая запросы на вычисления в формате
"operation1:value1,value2|operation2:value1,value2|operation3:value1,value2"(например,"Add:15,25|Multiply:6,8|Subtract:50,20")
Ваша задача:
- Создать пакет
mathutils, объявивpackage mathutilsв начале файла - Разобрать первый входной параметр, разделив его по символу вертикальной черты (
|), чтобы получить определения отдельных функций - Для каждого определения функции разделить строку по двоеточию, чтобы получить имя функции, параметры и тип операции
- Создать следующие экспортируемые функции в вашем пакете
mathutils:Add(a, b int) int— возвращает сумму a и bSubtract(a, b int) int— возвращает разность a и bMultiply(a, b int) int— возвращает произведение a и bDivide(a, b int) int— возвращает результат деления a на b (целочисленное деление)
- В вашей основной программе импортировать пакет
mathutils - Вывести заголовок информации о пакете:
"=== MATHUTILS PACKAGE DEMO ===" - Разобрать первый входной параметр и вывести доступные функции:
"Available functions in mathutils package:"- Для каждой функции:
"- [function_name]: Performs [operation_type] on two integers"
- Разобрать второй входной параметр, разделив его по вертикальной черте, чтобы получить отдельные запросы на вычисления
- Для каждого запроса на вычисление разделить строку по двоеточию, чтобы получить имя функции и параметры
- Разделить параметры по запятой, чтобы получить два целочисленных значения
- Преобразовать строки параметров в целые числа с помощью
strconv.Atoi - Вывести заголовок процесса вычислений:
"Performing calculations:" - Для каждого запроса на вычисление:
- Вызвать соответствующую функцию из пакета
mathutils - Вывести:
"mathutils.[function_name]([param1], [param2]) = [result]"
- Вызвать соответствующую функцию из пакета
- Рассчитать и вывести сводную статистику:
"Calculation Summary:""Total calculations performed: [number_of_calculations]""Functions used: [comma_separated_list_of_unique_function_names_used]""Sum of all results: [sum_of_all_calculation_results]"
- Вывести подтверждение использования пакета:
"Package demonstration completed successfully""All functions from mathutils package executed correctly"
Используйте пакет strings для разделения входных строк, пакет strconv для преобразования строк в целые числа и пакет fmt для форматированного вывода. Помните, что только функции, начинающиеся с заглавной буквы, будут экспортированы и доступны из других пакетов.
Важно: В обеих входных строках в качестве разделителя между записями используется вертикальная черта (|). Каждая запись в первом входном параметре имеет формат FunctionName:param1,param2:operationtype — сначала разделите по |, затем каждую запись разделите по :, чтобы извлечь имя функции (индекс 0) и тип операции (индекс 2).
Это задание демонстрирует, как создавать повторно используемый код с помощью пользовательских пакетов и как организовывать функциональность в логические модули.
Шпаргалка
Чтобы создать пользовательский пакет, объявите его в начале файла с помощью ключевого слова package:
package calculatorТолько экспортируемые идентификаторы (начинающиеся с заглавной буквы) доступны из других пакетов:
package calculator
func Add(a, b int) int {
return a + b
}Импортируйте и используйте свой пользовательский пакет из другого файла:
package main
import "calculator"
func main() {
result := calculator.Add(5, 3)
}Этот модульный подход организует код и позволяет повторно использовать его в нескольких программах без дублирования кода.
Попробуйте сами
package main
import (
"bufio"
"fmt"
"os"
"strconv"
"strings"
)
// TODO: Создайте здесь функции вашего пакета mathutils
// Поскольку мы не можем использовать отдельные файлы, определите функции напрямую
// Обычно они находятся в отдельном файле пакета
func main() {
// Чтение ввода с помощью bufio.Scanner для правильной обработки пробелов
scanner := bufio.NewScanner(os.Stdin)
scanner.Scan()
functionDefs := scanner.Text()
scanner.Scan()
calcRequests := scanner.Text()
// TODO: Напишите свой код ниже
// 1. Определите функции Add, Subtract, Multiply, Divide (имитируя пакет mathutils)
// 2. Разберите functionDefs: разделите по '|', чтобы получить каждое определение, затем каждое разделите по ':'
// Формат: FuncName:param1,param2:operation (например, "Add:5,3:addition")
// 3. Отобразите информацию о пакете и доступных функциях
// 4. Разберите calcRequests (разделите по '|'), выполните вычисления
// 5. Отобразите результаты и сводную статистику
// Подавление предупреждений о неиспользуемых переменных
_ = functionDefs
_ = calcRequests
_ = fmt.Sprintf
_ = strconv.Atoi
_ = strings.Split
// Не забудьте вывести данные в требуемом формате, как указано в задании
}В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Логика и управление потоком
1Продвинутое управление потоком выполнения
Switch с использованием `fallthrough`Выход из вложенных цикловПродолжение конкретного циклаОператор `goto`Итоги: Продвинутое управление циклами4Проект: Простой список задач
Настройка проектаДобавление задачи2Структуры и методы
Определение методов для структурПолучатели по значениюПолучатели по указателюВыбор типа получателяМетоды против функцийИтоги: поведение структур5Карты: подробный разбор
Карты структурУказатели как значения картПроверка карт на nilСравнение картИтоги: счетчик частоты слов3Интерфейсы (Основы)
Что такое интерфейс?Определение интерфейсаРеализация интерфейсаИспользование интерфейсных типовПустой интерфейсУтверждение типаПереключатель типовИтоги: Фигуры и поведение6Идиоматичный Go: Множества
Идиома множества в GoСоздание множестваДобавление в множествоПроверка наличия элементаУдаление из множестваИтерация по множествуИтоги — Уникальные имена пользователей9Пакеты и область видимости
Что такое пакет?Экспортируемые и неэкспортируемые элементыСоздание простого пакетаПсевдонимы пакетовПустой идентификатор `_`Функция `init`Итоги: создание утилиты