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 Schlüsselwort package zu deklarieren, gefolgt vom Paketnamen. Für unser Calculator-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. So könnten Sie eine exportierte Add-Funktion definieren:
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. Von Ihrem main-Paket aus 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.
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
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 für die 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 - Verarbeiten Sie die erste Eingabe, indem Sie sie an den Pipes (
|) aufteilen, um einzelne Funktionsdefinitionen zu erhalten - Teilen Sie jede Funktionsdefinition an den 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 ===" - Verarbeiten 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"
- Verarbeiten Sie die zweite Eingabe, indem Sie sie an den Pipes aufteilen, um einzelne Berechnungsanfragen zu erhalten
- Teilen Sie jede Berechnungsanfrage an den Doppelpunkten auf, um den Funktionsnamen und die Parameter zu erhalten
- Teilen Sie die Parameter an den 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 umzuwandeln, 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 zeigt, wie man wiederverwendbaren Code durch benutzerdefinierte Pakete erstellt und wie man Funktionalität in logische Module organisiert.
Spickzettel
Um ein benutzerdefiniertes Paket zu erstellen, deklarieren Sie es am Anfang Ihrer Datei mit dem Schlüsselwort package:
package calculatorNur exportierte Bezeichner (die mit einem Großbuchstaben beginnen) sind von anderen Paketen aus zugänglich:
package calculator
func Add(a, b int) int {
return a + b
}Importieren und verwenden Sie Ihr benutzerdefiniertes Paket aus einer anderen Datei:
package main
import "calculator"
func main() {
result := calculator.Add(5, 3)
}Dieser modulare Ansatz organisiert den Code und ermöglicht die Wiederverwendung in mehreren Programmen, ohne Code zu duplizieren.
Probier es selbst
package main
import (
"bufio"
"fmt"
"os"
"strconv"
"strings"
)
// TODO: Erstellen Sie hier Ihre mathutils-Paketfunktionen
// Da wir keine separaten Dateien verwenden können, definieren Sie die Funktionen direkt
// Diese würden sich normalerweise in einer separaten Paketdatei befinden
func main() {
// Eingabe mit bufio.Scanner lesen, um Leerzeichen korrekt zu behandeln
scanner := bufio.NewScanner(os.Stdin)
scanner.Scan()
functionDefs := scanner.Text()
scanner.Scan()
calcRequests := scanner.Text()
// TODO: Schreiben Sie Ihren Code unten
// 1. Definieren Sie die Funktionen Add, Subtract, Multiply, Divide (Simulation des mathutils-Pakets)
// 2. Parsen von functionDefs: Trennung durch '|', um jede Definition zu erhalten, dann jede durch ':' trennen
// Format: Funktionsname:Parameter1,Parameter2:Operation (z. B. "Add:5,3:addition")
// 3. Paketinformationen und verfügbare Funktionen anzeigen
// 4. calcRequests parsen (getrennt durch '|'), Berechnungen durchführen
// 5. Ergebnisse und zusammenfassende Statistiken anzeigen
// Warnungen wegen nicht verwendeter 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