Menu
Coddy logo textTech

Tworzenie prostego pakietu

Część sekcji Logika i przepływ sterowania ścieżki GO w Coddy. Lekcja 53 z 68.

Teraz czas stworzyć własny, niestandardowy pakiet! Tworzenie pakietów pozwala organizować kod w wielokrotnego użytku moduły, które można importować i wykorzystywać w różnych programach.

Aby utworzyć pakiet, zacznij od zadeklarowania go na początku pliku za pomocą słowa kluczowego package, po którym następuje nazwa pakietu. W przypadku naszego pakietu kalkulatora użyjemy:

package calculator

W tym pakiecie możesz definiować funkcje, zmienne i typy. Pamiętaj, że z innych pakietów będą dostępne tylko eksportowane identyfikatory (te zaczynające się wielką literą). Oto jak możesz zdefiniować eksportowaną funkcję Add:

package calculator

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

Aby użyć własnego pakietu z innego pliku, importujesz go tak samo jak każdy inny pakiet. Następnie z pakietu main możesz wywoływać wyeksportowane funkcje:

package main

import "calculator"

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

To modułowe podejście sprawia, że kod jest lepiej uporządkowany i pozwala ponownie wykorzystywać funkcjonalność w wielu programach bez powielania kodu.

challenge icon

Wyzwanie

Łatwy

Utwórz niestandardowy pakiet mathutils z podstawowymi operacjami matematycznymi, a następnie użyj go w swoim programie głównym. To wyzwanie sprawdzi Twoją umiejętność tworzenia pakietu, definiowania eksportowanych funkcji i importowania niestandardowego pakietu do użycia w innym programie.

Otrzymasz dwa wejścia:

  • Łańcuch zawierający definicje funkcji w formacie "function1:param1,param2:operation|function2:param1,param2:operation" (np. "Add:5,3:addition|Multiply:4,7:multiplication|Subtract:10,4:subtraction")
  • Łańcuch zawierający żądania obliczeń w formacie "operation1:value1,value2|operation2:value1,value2|operation3:value1,value2" (np. "Add:15,25|Multiply:6,8|Subtract:50,20")

Twoje zadanie:

  1. Utwórz pakiet mathutils, deklarując package mathutils na początku
  2. Przeanalizuj pierwsze wejście, dzieląc je na pionowych kreskach (|), aby uzyskać poszczególne definicje funkcji
  3. Dla każdej definicji funkcji podziel ją po dwukropkach, aby uzyskać nazwę funkcji, parametry i typ operacji
  4. Utwórz następujące eksportowane funkcje w pakiecie mathutils:
    • Add(a, b int) int — zwraca sumę a i b
    • Subtract(a, b int) int — zwraca różnicę a i b
    • Multiply(a, b int) int — zwraca iloczyn a i b
    • Divide(a, b int) int — zwraca wynik dzielenia a przez b (dzielenie całkowite)
  5. W programie głównym zaimportuj pakiet mathutils
  6. Wyświetl nagłówek z informacją o pakiecie: "=== MATHUTILS PACKAGE DEMO ==="
  7. Przeanalizuj pierwsze wejście i wyświetl dostępne funkcje:
    • "Available functions in mathutils package:"
    • Dla każdej funkcji: "- [function_name]: Performs [operation_type] on two integers"
  8. Przeanalizuj drugie wejście, dzieląc je na pionowych kreskach, aby uzyskać poszczególne żądania obliczeń
  9. Dla każdego żądania obliczenia podziel je po dwukropkach, aby uzyskać nazwę funkcji i parametry
  10. Podziel parametry po przecinkach, aby uzyskać dwie wartości całkowite
  11. Przekonwertuj ciągi parametrów na liczby całkowite za pomocą strconv.Atoi
  12. Wyświetl nagłówek procesu obliczeń: "Performing calculations:"
  13. Dla każdego żądania obliczenia:
    • Wywołaj odpowiednią funkcję z pakietu mathutils
    • Wyświetl: "mathutils.[function_name]([param1], [param2]) = [result]"
  14. Oblicz i wyświetl statystyki podsumowujące:
    • "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. Wyświetl potwierdzenie użycia pakietu:
    • "Package demonstration completed successfully"
    • "All functions from mathutils package executed correctly"

Użyj pakietu strings, aby podzielić ciągi wejściowe, pakietu strconv, aby przekonwertować ciągi na liczby całkowite, oraz pakietu fmt do formatowanego wyjścia. Pamiętaj, że tylko funkcje, których nazwy zaczynają się wielką literą, będą eksportowane i dostępne z innych pakietów.

Ważne: Oba wiersze wejściowe używają pionowych kresek (|) jako separatora między elementami. Każdy element pierwszego wejścia ma format FunctionName:param1,param2:operationtype: najpierw podziel po |, a następnie podziel każdy element po :, aby wyodrębnić nazwę funkcji (indeks 0) i typ operacji (indeks 2).

To wyzwanie pokazuje, jak tworzyć kod wielokrotnego użytku za pomocą niestandardowych pakietów oraz jak organizować funkcjonalność w logiczne moduły.

Spróbuj swoich sił

package main

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

// TODO: Utwórz tutaj funkcje pakietu mathutils
// Ponieważ nie możemy używać osobnych plików, zdefiniuj funkcje bezpośrednio tutaj
// Normalnie znajdowałyby się one w osobnym pliku pakietu

func main() {
	// Odczytaj dane wejściowe za pomocą bufio.Scanner, aby poprawnie obsłużyć spacje
	scanner := bufio.NewScanner(os.Stdin)

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

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

	// TODO: Napisz swój kod poniżej
	// 1. Zdefiniuj funkcje Add, Subtract, Multiply, Divide (symulując pakiet mathutils)
	// 2. Przeanalizuj functionDefs: podziel według '|', aby uzyskać poszczególne definicje, a następnie podziel każdą według ':'
	//    Format: FuncName:param1,param2:operation  (np. "Add:5,3:addition")
	// 3. Wyświetl informacje o pakiecie i dostępne funkcje
	// 4. Przeanalizuj calcRequests (podziel według '|') i wykonaj obliczenia
	// 5. Wyświetl wyniki i statystyki podsumowujące

	// Wyłącz ostrzeżenia o nieużywanych zmiennych
	_ = functionDefs
	_ = calcRequests
	_ = fmt.Sprintf
	_ = strconv.Atoi
	_ = strings.Split

	// Pamiętaj, aby wyświetlić wynik w wymaganym formacie, zgodnie z opisem zadania
}
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Logika i przepływ sterowania

Poćwicz samodzielnie: Kompilator Go online