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 calculatorIn 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.
Aufgabe
EinfachErstelle 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:
- Ein
mathutils-Paket zu erstellen, indem du obenpackage mathutilsdeklarierst - Die erste Eingabe zu verarbeiten, indem du sie an Pipe-Zeichen (
|) aufteilst, um einzelne Funktionsdefinitionen zu erhalten - Jede Funktionsdefinition an Doppelpunkten aufzuteilen, um den Funktionsnamen, die Parameter und den Operationstyp zu erhalten
- Die folgenden exportierten Funktionen in deinem
mathutils-Paket zu erstellen:Add(a, b int) int– gibt die Summe von a und b zurückSubtract(a, b int) int– gibt a minus b zurückMultiply(a, b int) int– gibt das Produkt von a und b zurückDivide(a, b int) int– gibt a geteilt durch b zurück (Ganzzahldivision)
- In deinem Hauptprogramm das
mathutils-Paket zu importieren - Die Kopfzeile mit den Paketinformationen anzuzeigen:
"=== MATHUTILS PACKAGE DEMO ===" - 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"
- Die zweite Eingabe an Pipe-Zeichen aufzuteilen, um einzelne Berechnungsanfragen zu erhalten
- Jede Berechnungsanfrage an Doppelpunkten aufzuteilen, um den Funktionsnamen und die Parameter zu erhalten
- Die Parameter an Kommas aufzuteilen, um die beiden ganzzahligen Werte zu erhalten
- Die Parameterzeichenketten mithilfe von
strconv.Atoiin Ganzzahlen umzuwandeln - Die Kopfzeile für den Berechnungsvorgang anzuzeigen:
"Performing calculations:" - Für jede Berechnungsanfrage:
- Die entsprechende Funktion aus dem
mathutils-Paket aufzurufen - Anzuzeigen:
"mathutils.[function_name]([param1], [param2]) = [result]"
- Die entsprechende Funktion aus dem
- 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]"
- 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
}Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Logik & Ablauf
1Fortgeschrittener Kontrollfluss
Switch mit `fallthrough`Abbrechen von verschachtelten SchleifenFortsetzen einer bestimmten SchleifeDie `goto`-AnweisungZusammenfassung – Fortgeschrittene Schleifensteuerung4Projekt: Einfache Aufgabenliste
Projekt-SetupEine Aufgabe hinzufügen2Structs und Methoden
Methoden für Structs definierenValue ReceiverPointer ReceiverReceiver auswählenMethoden vs. FunktionenZusammenfassung – Struct-Verhalten5Maps im Detail
Maps von StructsPointer als Map-WertePrüfen auf Nil-MapsMaps vergleichenZusammenfassung – Wortfrequenz-Zähler8Projekt: Einfache Bestandsverwaltung
ProjektübersichtLagerbestand prüfen11Abschlussherausforderungen
Einfache KontaktlisteEinfacher Zahlen-ValidatorSammler für eindeutige Elemente3Interfaces (Die Grundlagen)
Was ist ein Interface?Ein Interface definierenEin Interface implementierenInterface-Typen verwendenLeeres InterfaceType AssertionsType SwitchZusammenfassung – Formen und Verhalten6Idiomatisches Go: Sets
Das Set-Idiom in GoEin Set erstellenElemente zu einem Set hinzufügenPrüfen auf MitgliedschaftAus einem Set entfernenÜber ein Set iterierenZusammenfassung – Eindeutige Benutzernamen9Packages und Scope
Was ist ein Package?Exportiert vs. Nicht-exportiertEin einfaches Package erstellenPackage-AliasingDer Blank Identifier `_`Die `init`-FunktionRecap – Erstellen eines UtilitysÜbe selbstständig: Online-Go-Compiler