Ein einfaches Package erstellen
Teil des Abschnitts Logik & Ablauf der GO-Journey von Coddy — Lektion 53 von 68.
Jetzt ist es an der Zeit, Ihr eigenes benutzerdefiniertes Paket zu erstellen! Das Erstellen von Paketen ermöglicht es Ihnen, Ihren Code in wiederverwendbare Module zu organisieren, die importiert und in verschiedenen Programmen verwendet werden können.
Um ein Paket zu erstellen, beginnen Sie damit, es am Anfang Ihrer Datei mit dem package-Schlüsselwort zu deklarieren, gefolgt vom Paketnamen. Für unser Taschenrechner-Paket verwenden wir:
package calculatorInnerhalb dieses Pakets können Sie Funktionen, Variablen und Typen definieren. Denken Sie daran, dass nur exportierte Bezeichner (solche, die mit einem Großbuchstaben beginnen) von anderen Paketen aus zugänglich sind. Hier sehen Sie, wie Sie eine exportierte Add-Funktion definieren könnten:
package calculator
func Add(a, b int) int {
return a + b
}Um Ihr benutzerdefiniertes Paket aus einer anderen Datei zu verwenden, importieren Sie es genau wie jedes andere Paket. Aus Ihrem main-Paket können Sie dann die exportierten Funktionen aufrufen:
package main
import "calculator"
func main() {
result := calculator.Add(5, 3)
}Dieser modulare Ansatz macht Ihren Code organisierter und ermöglicht es Ihnen, Funktionalität über mehrere Programme hinweg wiederzuverwenden, ohne Code zu duplizieren.
Aufgabe
EinfachErstellen Sie ein benutzerdefiniertes mathutils-Paket mit grundlegenden mathematischen Operationen und verwenden Sie es anschließend in Ihrem Hauptprogramm. Diese Herausforderung testet Ihre Fähigkeit, ein Paket zu erstellen, exportierte Funktionen zu definieren und Ihr benutzerdefiniertes Paket zur Verwendung in einem anderen Programm zu importieren.
Sie erhalten zwei Eingaben:
- Einen String, der Funktionsdefinitionen im Format
"function1:param1,param2:operation|function2:param1,param2:operation"enthält (z. B."Add:5,3:addition|Multiply:4,7:multiplication|Subtract:10,4:subtraction") - Einen String, der Berechnungsanfragen im Format
"operation1:value1,value2|operation2:value1,value2|operation3:value1,value2"enthält (z. B."Add:15,25|Multiply:6,8|Subtract:50,20")
Ihre Aufgabe ist es:
- Erstellen Sie ein
mathutils-Paket, indem Siepackage mathutilsam Anfang deklarieren - Parsen Sie die erste Eingabe, indem Sie sie an Pipes (
|) aufteilen, um einzelne Funktionsdefinitionen zu erhalten - Teilen Sie jede Funktionsdefinition an Doppelpunkten auf, um den Funktionsnamen, die Parameter und den Operationstyp zu erhalten
- Erstellen Sie die folgenden exportierten Funktionen in Ihrem
mathutils-Paket: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)
- Importieren Sie in Ihrem Hauptprogramm das
mathutils-Paket - Zeigen Sie den Header für die Paketinformationen an:
"=== MATHUTILS PACKAGE DEMO ===" - Parsen Sie die erste Eingabe und zeigen Sie die verfügbaren Funktionen an:
"Available functions in mathutils package:"- Für jede Funktion:
"- [function_name]: Performs [operation_type] on two integers"
- Parsen Sie die zweite Eingabe, indem Sie sie an Pipes aufteilen, um einzelne Berechnungsanfragen zu erhalten
- Teilen Sie jede Berechnungsanfrage an Doppelpunkten auf, um den Funktionsnamen und die Parameter zu erhalten
- Teilen Sie die Parameter an Kommas auf, um die beiden Ganzzahlwerte zu erhalten
- Konvertieren Sie die Parameter-Strings mit
strconv.Atoiin Ganzzahlen - Zeigen Sie den Header für den Berechnungsprozess an:
"Performing calculations:" - Für jede Berechnungsanfrage:
- Rufen Sie die entsprechende Funktion aus dem
mathutils-Paket auf - Anzeige:
"mathutils.[function_name]([param1], [param2]) = [result]"
- Rufen Sie die entsprechende Funktion aus dem
- Berechnen und zeigen Sie Zusammenfassungsstatistiken an:
"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]"
- Zeigen Sie die Bestätigung der Paketnutzung an:
"Package demonstration completed successfully""All functions from mathutils package executed correctly"
Verwenden Sie das strings-Paket, um die Eingabestrings aufzuteilen, das strconv-Paket, um Strings in Ganzzahlen zu konvertieren, und das fmt-Paket für die formatierte Ausgabe. Denken Sie daran, dass nur Funktionen, die mit Großbuchstaben beginnen, exportiert werden und von anderen Paketen aus zugänglich sind.
Wichtig: Beide Eingabezeilen verwenden Pipes (|) als Trennzeichen zwischen den Einträgen. Jeder Eintrag in der ersten Eingabe hat das Format FunctionName:param1,param2:operationtype — teilen Sie zuerst nach | auf und teilen Sie dann jeden Eintrag nach : auf, um den Funktionsnamen (Index 0) und den Operationstyp (Index 2) zu extrahieren.
Diese Herausforderung demonstriert, wie man wiederverwendbaren Code durch benutzerdefinierte Pakete erstellt und wie man Funktionalität in logische Module organisiert.
Probier es selbst
package main
import (
"bufio"
"fmt"
"os"
"strconv"
"strings"
)
// TODO: Erstelle hier deine mathutils Paketfunktionen
// Da wir keine separaten Dateien verwenden können, definiere die Funktionen direkt
// Diese würden sich normalerweise in einer separaten Paketdatei befinden
func main() {
// Eingabe mit bufio.Scanner lesen, um Leerzeichen korrekt zu verarbeiten
scanner := bufio.NewScanner(os.Stdin)
scanner.Scan()
functionDefs := scanner.Text()
scanner.Scan()
calcRequests := scanner.Text()
// TODO: Schreibe deinen Code unten
// 1. Definiere die Funktionen Add, Subtract, Multiply, Divide (Simulation des mathutils Pakets)
// 2. Parse functionDefs: Teile nach '|', um jede Definition zu erhalten, dann teile jede nach ':'
// Format: FuncName:param1,param2:operation (z. B. "Add:5,3:addition")
// 3. Paketinformationen und verfügbare Funktionen anzeigen
// 4. Parse calcRequests (Teilen nach '|'), Berechnungen durchführen
// 5. Ergebnisse und zusammenfassende Statistiken anzeigen
// Warnungen für nicht verwendete Variablen unterdrücken
_ = functionDefs
_ = calcRequests
_ = fmt.Sprintf
_ = strconv.Atoi
_ = strings.Split
// Denken Sie 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