Menu
Coddy logo textTech

Ein einfaches Package erstellen

Teil des Abschnitts Logik & Ablauf der GO-Journey von Coddy. Lektion 53 von 68.

Jetzt ist es an der Zeit, dein eigenes benutzerdefiniertes Paket zu erstellen! Durch das Erstellen von Paketen kannst du deinen Code in wiederverwendbare Module organisieren, die importiert und in verschiedenen Programmen verwendet werden können.

Um ein Paket zu erstellen, deklarierst du es zunächst am Anfang deiner Datei mit dem Schlüsselwort package, gefolgt vom Paketnamen. Für unser Taschenrechnerpaket verwenden wir:

package calculator

In diesem Paket kannst du Funktionen, Variablen und Typen definieren. Denke daran, dass nur exportierte Bezeichner (solche, die mit einem Großbuchstaben beginnen) aus anderen Paketen zugänglich sein werden. So könntest du eine exportierte Add-Funktion definieren:

package calculator

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

Um dein eigenes Paket aus einer anderen Datei zu verwenden, importierst du es genauso wie jedes andere Paket. Aus deinem main-Paket kannst du dann die exportierten functions aufrufen:

package main

import "calculator"

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

Dieser modulare Ansatz macht deinen Code übersichtlicher und ermöglicht es dir, Funktionalität in mehreren Programmen wiederzuverwenden, ohne Code zu duplizieren.

challenge icon

Aufgabe

Einfach

Erstelle ein benutzerdefiniertes mathutils-Paket mit grundlegenden mathematischen Operationen und verwende es anschließend in deinem Hauptprogramm. Diese Herausforderung prüft deine Fähigkeit, ein Paket zu erstellen, exportierte Funktionen zu definieren und dein benutzerdefiniertes Paket zur Verwendung in einem anderen Programm zu importieren.

Du erhältst zwei Eingaben:

  • Eine Zeichenkette mit Funktionsdefinitionen im Format "function1:param1,param2:operation|function2:param1,param2:operation" (z. B. "Add:5,3:addition|Multiply:4,7:multiplication|Subtract:10,4:subtraction")
  • Eine Zeichenkette mit Berechnungsanfragen im Format "operation1:value1,value2|operation2:value1,value2|operation3:value1,value2" (z. B. "Add:15,25|Multiply:6,8|Subtract:50,20")

Deine Aufgabe ist es:

  1. Ein mathutils-Paket zu erstellen, indem du oben package mathutils deklarierst
  2. Die erste Eingabe zu verarbeiten, indem du sie an Pipe-Zeichen (|) aufteilst, um einzelne Funktionsdefinitionen zu erhalten
  3. Jede Funktionsdefinition an Doppelpunkten aufzuteilen, um den Funktionsnamen, die Parameter und den Operationstyp zu erhalten
  4. Die folgenden exportierten Funktionen in deinem mathutils-Paket zu erstellen:
    • Add(a, b int) int – gibt die Summe von a und b zurück
    • Subtract(a, b int) int – gibt a minus b zurück
    • Multiply(a, b int) int – gibt das Produkt von a und b zurück
    • Divide(a, b int) int – gibt a geteilt durch b zurück (Ganzzahldivision)
  5. In deinem Hauptprogramm das mathutils-Paket zu importieren
  6. Die Kopfzeile mit den Paketinformationen anzuzeigen: "=== MATHUTILS PACKAGE DEMO ==="
  7. Die erste Eingabe zu verarbeiten und die verfügbaren Funktionen anzuzeigen:
    • "Available functions in mathutils package:"
    • Für jede Funktion: "- [function_name]: Performs [operation_type] on two integers"
  8. Die zweite Eingabe an Pipe-Zeichen aufzuteilen, um einzelne Berechnungsanfragen zu erhalten
  9. Jede Berechnungsanfrage an Doppelpunkten aufzuteilen, um den Funktionsnamen und die Parameter zu erhalten
  10. Die Parameter an Kommas aufzuteilen, um die beiden ganzzahligen Werte zu erhalten
  11. Die Parameterzeichenketten mithilfe von strconv.Atoi in Ganzzahlen umzuwandeln
  12. Die Kopfzeile für den Berechnungsvorgang anzuzeigen: "Performing calculations:"
  13. Für jede Berechnungsanfrage:
    • Die entsprechende Funktion aus dem mathutils-Paket aufzurufen
    • Anzuzeigen: "mathutils.[function_name]([param1], [param2]) = [result]"
  14. Zusammenfassungsstatistiken zu berechnen und anzuzeigen:
    • "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. Eine Bestätigung der Paketverwendung anzuzeigen:
    • "Package demonstration completed successfully"
    • "All functions from mathutils package executed correctly"

Verwende das strings-Paket, um die Eingabezeichenketten aufzuteilen, das strconv-Paket, um Zeichenketten in Ganzzahlen umzuwandeln, und das fmt-Paket für formatierte Ausgaben. Denke daran, dass nur Funktionen, die mit Großbuchstaben beginnen, exportiert werden und aus anderen Paketen zugänglich sind.

Wichtig: Beide Eingabezeilen verwenden Pipe-Zeichen (|) als Trennzeichen zwischen den Einträgen. Jeder Eintrag in der ersten Eingabe hat das Format FunctionName:param1,param2:operationtype: Teile zuerst an | auf und anschließend jeden Eintrag an :, um den Funktionsnamen (Index 0) und den Operationstyp (Index 2) zu extrahieren.

Diese Herausforderung zeigt, wie du durch benutzerdefinierte Pakete wiederverwendbaren Code erstellen und Funktionalität in logischen Modulen organisieren kannst.

Probier es selbst

package main

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

// TODO: Create your mathutils package functions here
// Da wir keine separaten Dateien verwenden können, definiere die Funktionen direkt
// Diese wären normalerweise in einer separaten Paketdatei

func main() {
	// Eingabe mit bufio.Scanner lesen, um Leerzeichen korrekt zu handhaben
	scanner := bufio.NewScanner(os.Stdin)

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

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

	// TODO: Schreibe deinen Code unten
	// 1. Define Add, Subtract, Multiply, Divide functions (simulating mathutils package)
	// 2. Parse functionDefs: teile anhand von '|' auf, um jede Definition zu erhalten, dann teile jede anhand von ':'
	//    Format: FuncName:param1,param2:operation  (z. B. "Add:5,3:addition")
	// 3. Display package information and available functions
	// 4. Parse calcRequests (split by '|'), perform calculations
	// 5. Ergebnisse und Zusammenfassungsstatistiken anzeigen

	// Warnungen wegen ungenutzter Variablen unterdrücken
	_ = functionDefs
	_ = calcRequests
	_ = fmt.Sprintf
	_ = strconv.Atoi
	_ = strings.Split

	// Denke daran, das erforderliche Format wie in der Challenge angegeben auszugeben
}
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Logik & Ablauf

Übe selbstständig: Online-Go-Compiler