Lesen der Standardeingabe in Go: Vollständiger Leitfaden mit Beispielen

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Wie man von der Standardeingabe in Go liest: Vom Anfänger zum Profi



Haben Sie sich jemals gefragt, wie Sie Ihr Go-Programm dazu bringen, dem Benutzer zuzuhören? Wie schreibt man ein Dienstprogramm, das Befehle von der Konsole entgegennimmt, oder ein interaktives CLI-Tool? Wenn ja, sind Sie hier genau richtig. Heute werden wir das Lesen von der Standardeingabe (stdin) in Go so detailliert wie möglich behandeln.



Dieses Thema ist ein echter Hit auf Stack Overflow. Die Frage „How can I read from standard input in the console?“ hat tausende Aufrufe gesammelt. Und das zu Recht: Die Standardeingabe ist die Basis, ohne die kein ernsthaftes Go-Projekt auskommt. Wir passen diese Frage an das deutschsprachige Publikum an und verwandeln sie in ein vollwertiges Tutorial.



In diesem Artikel erfahren Sie:

  • Was os.Stdin ist und wie man damit arbeitet
  • Wie man bufio.Scanner für zeilenweises Lesen verwendet
  • Warum fmt.Scan ein zweischneidiges Schwert ist
  • Wie man ganze Dateien von stdin liest
  • Geheimnisse der Fehlerbehandlung und Leistung


Los geht's!



Was ist stdin und warum wird es in Go benötigt?



Die Standardeingabe (stdin) ist ein Datenstrom, den Ihr Programm von der Konsole oder von einem anderen Prozess erhält. In Go wird sie durch die Variable os.Stdin vom Typ *os.File dargestellt. Dies ist das Tor, durch das Daten in Ihr Programm gelangen.



Wozu wird das benötigt? Stellen Sie sich vor:

  • Sie schreiben ein CLI-Dienstprogramm, das Benutzereingaben verarbeitet
  • Sie erstellen einen Log-Parser, der Daten über eine Pipe liest (cat log.txt | myapp)
  • Sie müssen eine interaktive Eingabe mit Hinweisen implementieren


Go, als Sprache für die Systemprogrammierung, bietet elegante Werkzeuge für die Arbeit mit stdin. Lassen Sie uns diese der Reihe nach durchgehen.



Methode 1: bufio.Scanner – Der König des zeilenweisen Lesens



Die beliebteste und empfohlene Methode zum Lesen von stdin in Go ist bufio.Scanner. Sie ist einfach, effizient und löst 90% der Aufgaben.



So sieht ein klassisches Beispiel aus:



package main

import ( "bufio" "fmt" "os")

func main() { scanner := bufio.NewScanner(os.Stdin) fmt.Println("Geben Sie Text ein (Strg+D zum Beenden):") for scanner.Scan() { line := scanner.Text() fmt.Println("Sie haben eingegeben:", line) } if err := scanner.Err(); err != nil { fmt.Fprintln(os.Stderr, "Lesefehler:", err) }}


Wie funktioniert das?

  • bufio.NewScanner(os.Stdin) – erstellt einen Scanner, der von der Standardeingabe liest
  • scanner.Scan() – gibt true zurück, solange Daten vorhanden sind (standardmäßig bis zum Zeilenumbruchzeichen)
  • scanner.Text() – gibt die aktuelle Zeile ohne das -Zeichen zurück
  • Die Schleife wird bei EOF unterbrochen (Strg+D unter Linux/Mac, Strg+Z unter Windows)


Dieser Code ist die Basis für jede Konsoleneingabe in Go. Er funktioniert hervorragend mit Pipes und interaktiver Eingabe.



Anpassung des Scanners



Standardmäßig teilt der Scanner die Eingabe nach Zeilen. Sie können dies jedoch ändern:



// Lesen nach Wörternscanner.Split(bufio.ScanWords)

// Lesen nach Bytesscanner.Split(bufio.ScanBytes)

// Lesen nach Zeichen (Runes)scanner.Split(bufio.ScanRunes)


Sie können auch einen eigenen Splitter definieren – zum Beispiel für CSV oder benutzerdefinierte Trennzeichen. Aber das ist ein Thema für einen separaten Artikel.



Methode 2: fmt.Scan – Schnell und schmutzig



Wenn Sie einen einzelnen Wert eingeben müssen – eine Zahl, eine Zeichenkette oder mehrere Variablen – hilft fmt.Scan. Es ist wie scanf in C, nur

Blogs

Buchempfehlungen