Menu
Coddy logo textTech

Создание простого пакета

Часть раздела Логика и управление потоком путешествия по 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)
}

Этот модульный подход делает ваш код более организованным и позволяет повторно использовать функциональность в нескольких программах без дублирования кода.

quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

challenge icon

Задание

Легко

Создайте собственный пакет 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")

Ваша задача:

  1. Создать пакет mathutils, объявив package mathutils в начале файла
  2. Разобрать первый входной параметр, разделив его по символу вертикальной черты (|), чтобы получить определения отдельных функций
  3. Для каждого определения функции разделить строку по двоеточию, чтобы получить имя функции, параметры и тип операции
  4. Создать следующие экспортируемые функции в вашем пакете mathutils:
    • Add(a, b int) int — возвращает сумму a и b
    • Subtract(a, b int) int — возвращает разность a и b
    • Multiply(a, b int) int — возвращает произведение a и b
    • Divide(a, b int) int — возвращает результат деления a на b (целочисленное деление)
  5. В вашей основной программе импортировать пакет mathutils
  6. Вывести заголовок информации о пакете: "=== MATHUTILS PACKAGE DEMO ==="
  7. Разобрать первый входной параметр и вывести доступные функции:
    • "Available functions in mathutils package:"
    • Для каждой функции: "- [function_name]: Performs [operation_type] on two integers"
  8. Разобрать второй входной параметр, разделив его по вертикальной черте, чтобы получить отдельные запросы на вычисления
  9. Для каждого запроса на вычисление разделить строку по двоеточию, чтобы получить имя функции и параметры
  10. Разделить параметры по запятой, чтобы получить два целочисленных значения
  11. Преобразовать строки параметров в целые числа с помощью strconv.Atoi
  12. Вывести заголовок процесса вычислений: "Performing calculations:"
  13. Для каждого запроса на вычисление:
    • Вызвать соответствующую функцию из пакета mathutils
    • Вывести: "mathutils.[function_name]([param1], [param2]) = [result]"
  14. Рассчитать и вывести сводную статистику:
    • "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]"
  15. Вывести подтверждение использования пакета:
    • "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

	// Не забудьте вывести данные в требуемом формате, как указано в задании
}
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Логика и управление потоком