Alles zusammenfügen
Teil des Abschnitts Logik & Ablauf der GO-Journey von Coddy. Lektion 25 von 68.
Aufgabe
EinfachZeit, deine Aufgabenlisten-Anwendung fertigzustellen. In diesem letzten Schritt führst du alles aus den vorherigen Lektionen zusammen: die Task-Struktur, addTask, viewAllTasks, completeTask und removeTask, gesteuert durch eine Sitzung mit Menüaktionen.
Du erhältst drei Eingaben:
- Eine Zeichenkette mit dem Anwendungsnamen und dem Benutzernamen, getrennt durch ein Komma (z. B.
"MyTasks,Alice") - Eine Zeichenkette mit den Aufgaben, mit denen die Liste beginnt, im Format
"name1:status1,name2:status2", wobei der Status"true"oder"false"ist (z. B."Write report:false,Call dentist:true"). Diese Zeile ist leer, wenn die Liste anfangs leer ist. - Eine durch Kommas getrennte Zeichenkette mit den Aktionen der Sitzung. Eine Aktion besteht entweder nur aus ihrem Namen oder aus ihrem Namen und einem Parameter, verbunden durch
|(z. B."add|Buy groceries,view,complete|2,remove|0,exit"). Die Aktionsliste endet immer mit"exit".
Aufgabennamen können Leerzeichen enthalten. Lies daher alle drei Zeilen mit bufio.Scanner ein, wie in den vorherigen Lektionen.
Deine Aufgabe ist es:
- Dieselbe
Task-Struktur mit den FeldernName(string) undCompleted(bool) zu definieren - Die vier bereits geschriebenen Funktionen mit denselben Signaturen wieder einzufügen:
addTask(tasks []Task, taskName string) []TaskviewAllTasks(tasks []Task), die für eine abgeschlossene Aufgabe"[x] [task_name]"und für eine noch offene Aufgabe"[ ] [task_name]"ausgibtcompleteTask(tasks *[]Task, index int)removeTask(tasks []Task, index int) []Task
- Die Startliste aus der zweiten Eingabe aufzubauen und dabei zu berücksichtigen, dass eine leere Zeile eine leere Liste bedeutet
- Die Begrüßungsnachricht und das Menü genau wie im ersten Schritt des Projekts auszugeben:
"Welcome to [app_name], [user_name]!""1. Add Task""2. View Tasks""3. Complete Task""4. Remove Task""5. Exit""Current tasks: [count]"
- Die Aktionen in der angegebenen Reihenfolge auszuführen. Jede Aktion gibt zuerst ihre Überschrift aus:
"add":"--- ADD TASK ---"ausgeben, die durch den Parameter angegebene Aufgabe hinzufügen und anschließend"Task '[task_name]' added!"ausgeben"view":"--- VIEW TASKS ---"ausgeben, jede Aufgabe mitviewAllTasksauflisten und anschließend die Zusammenfassungszeile ausgeben"complete":"--- COMPLETE TASK ---"ausgeben, die Aufgabe an diesem Index als abgeschlossen markieren und anschließend"Task '[task_name]' marked as completed!"ausgeben"remove":"--- REMOVE TASK ---"ausgeben, die Aufgabe an diesem Index entfernen und anschließend"Task '[task_name]' removed successfully!"ausgeben"exit":"--- EXIT ---"ausgeben, anschließend"Final list:", dann die gesamte Liste, danach die Zusammenfassungszeile und schließlich"Goodbye, [user_name]!". Nach exit wird nichts mehr ausgeführt.
- Die Indizes beginnen bei 0, wie in den vorherigen Lektionen. Wenn ein
"complete"- oder"remove"-Index außerhalb der Liste liegt, gib stattdessen"Invalid task number"aus und lasse die Liste unverändert. - Die Zusammenfassungszeile ist die bereits bekannte:
"Total: [total_count] tasks ([completed_count] completed, [incomplete_count] remaining)"
Verwende das Paket strings, um die Eingabezeilen aufzuteilen, und das Paket strconv, um einen Index in eine Zahl umzuwandeln. Dieser letzte Schritt zeigt, wie die kleinen Funktionen, die du einzeln geschrieben hast, zusammen ein funktionierendes Programm ergeben.
Probier es selbst
package main
import (
"bufio"
"fmt"
"os"
"strconv"
"strings"
)
type Task struct {
Name string
Completed bool
}
// TODO: Bring back addTask, viewAllTasks, completeTask and removeTask
// aus den vorherigen Lektionen dieses Projekts
func main() {
// Scanner zum Lesen von Eingabezeilen erstellen
scanner := bufio.NewScanner(os.Stdin)
// Den Anwendungsnamen und den Benutzernamen lesen
scanner.Scan()
names := scanner.Text()
// Die Aufgaben lesen, mit denen die Liste beginnt
scanner.Scan()
taskData := scanner.Text()
// Die Aktionen der Sitzung lesen
scanner.Scan()
actionData := scanner.Text()
// TODO: Die Implementierung vervollständigen
// 1. names an "," aufteilen, um den App-Namen und den Benutzernamen zu erhalten
// 2. Die anfängliche Slice von tasks aus taskData erstellen
// 3. Die Willkommensnachricht, das Menü und die aktuelle Aufgabenanzahl ausgeben
// 4. Jede Aktion in actionData der Reihe nach ausführen und zuerst ihren Header ausgeben
}
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 VerhaltenÜbe selbstständig: Online-Go-Compiler