Menu
Coddy logo textTech

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

Часть раздела Логика и управление потоком путешествия по GO на Coddy. Урок 53 из 68.

Теперь пришло время создать собственный пользовательский пакет! Создание пакетов позволяет организовать код в повторно используемые модули, которые можно импортировать и использовать в разных программах.

Чтобы создать пакет, начни с его объявления в верхней части своего file с помощью ключевого слова package, за которым следует имя пакета. Для нашего пакета calculator мы будем использовать:

package calculator

Внутри этого пакета можно определять Functions, переменные и типы. Помни, что только экспортируемые идентификаторы (начинающиеся с заглавной буквы) будут доступны из других пакетов. Вот как можно определить экспортируемую Add function:

package calculator

func Add(a, b int) int {
    return a + b
}

Чтобы использовать свой пользовательский пакет из другого файла, вы импортируете его так же, как любой другой пакет. Затем из своего пакета main вы можете вызывать экспортированные functions:

package main

import "calculator"

func main() {
    result := calculator.Add(5, 3)
}

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

challenge icon

Задание

Легко

Create пользовательский пакет mathutils с базовыми математическими операциями, а затем используй его из своей основной программы. Это challenge проверит твою способность Create пакет, define экспортируемые функции и import пользовательский пакет для использования в другой программе.

Ты получишь два входных значения:

  • Строку, содержащую определения function в формате "function1:param1,param2:operation|function2:param1,param2:operation" (например, "Add:5,3:addition|Multiply:4,7:multiplication|Subtract:10,4:subtraction")
  • Строку, содержащую запросы calculation в формате "operation1:value1,value2|operation2:value1,value2|operation3:value1,value2" (например, "Add:15,25|Multiply:6,8|Subtract:50,20")

Твоя задача:

  1. Create пакет mathutils, объявив package mathutils в верхней части
  2. Разобрать первый вход, разделив его по вертикальным чертам (|), чтобы получить отдельные определения function
  3. Для каждого определения function разделить строку по двоеточиям, чтобы получить имя function, параметры и тип operation
  4. Create следующие экспортируемые функции в своём пакете 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. В своей основной программе import пакет mathutils
  6. Display заголовок information пакета: "=== MATHUTILS PACKAGE DEMO ==="
  7. Разобрать первый вход и Display доступные функции:
    • "Available functions in mathutils package:"
    • Для каждой функции: "- [function_name]: Performs [operation_type] on two integers"
  8. Разобрать второй вход, разделив его по вертикальным чертам, чтобы получить отдельные запросы calculation
  9. Для каждого запроса calculation разделить строку по двоеточиям, чтобы получить имя function и параметры
  10. Разделить параметры по запятым, чтобы получить два целых значения
  11. Преобразовать строки параметров в целые числа с помощью strconv.Atoi
  12. Display заголовок процесса calculation: "Performing calculations:"
  13. Для каждого запроса calculation:
    • Вызвать соответствующую функцию из пакета mathutils
    • Display: "mathutils.[function_name]([param1], [param2]) = [result]"
  14. Вычислить и Display сводную статистику:
    • "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. Display подтверждение использования пакета:
    • "Package demonstration completed successfully"
    • "All functions from mathutils package executed correctly"

Используй пакет strings, чтобы разделять входные строки, пакет strconv — для преобразования строк в целые числа, а пакет fmt — для форматированного вывода. Помни, что только функции, начинающиеся с заглавных букв, будут экспортированы и доступны из других пакетов.

Важно: обе входные строки используют вертикальные черты (|) как разделитель между элементами. Каждая запись в первом входе имеет формат FunctionName:param1,param2:operationtype: сначала раздели строку по |, затем раздели каждую запись по :, чтобы извлечь имя function (индекс 0) и тип operation (индекс 2).

Этот challenge демонстрирует, как Create повторно используемый код с помощью пользовательских пакетов и как организовать функциональность в логические модули.

Попробуйте сами

package main

import (
	"bufio"
	"fmt"
	"os"
	"strconv"
	"strings"
)

// TODO: Create your mathutils package functions here
// Поскольку мы не можем использовать отдельные файлы, определите функции напрямую
// Обычно они находились бы в отдельном файле пакета

func main() {
	// Читаем ввод с помощью bufio.Scanner для правильной обработки пробелов
	scanner := bufio.NewScanner(os.Stdin)

	scanner.Scan()
	functionDefs := scanner.Text()

	scanner.Scan()
	calcRequests := scanner.Text()

	// TODO: Напишите ваш код ниже
	// 1. Define Add, Subtract, Multiply, Divide functions (simulating mathutils package)
	// 2. Разберите functionDefs: разделите по '|' чтобы получить каждое определение, затем разделите каждое по ':'
	//    Формат: FuncName:param1,param2:operation  (например, "Add:5,3:addition")
	// 3. Display package information and available functions
	// 4. Parse calcRequests (split by '|'), perform calculations
	// 5. Отобразите результаты и сводную статистику

	// Подавить предупреждения о неиспользуемых переменных
	_ = functionDefs
	_ = calcRequests
	_ = fmt.Sprintf
	_ = strconv.Atoi
	_ = strings.Split

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

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

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

Потренируйтесь самостоятельно: Онлайн-компилятор Go