Versuchen Sie immer, bufio.NewScanner zum Sammeln von Eingaben aus der Konsole zu verwenden. Wie andere bereits erwähnt haben, gibt es mehrere Möglichkeiten, um den Job zu erledigen, aber Scanner ist ursprünglich dazu gedacht, den Job zu erledigen. Dave Cheney erklärt, warum Sie Scanner anstelle von bufio.Reader's ReadLine verwenden sollten.
https://web.archive.org/web/20190508023954/https://twitter.com/davecheney/status/604837853344989184
Hier ist die Code-Schnipsel-Antwort auf Ihre Frage
package main
import (
"bufio"
"fmt"
"os"
)
/*
Drei Möglichkeiten der Eingabe
1. fmt.Scanln(&input)
2. reader.ReadString()
3. scanner.Scan()
Hier empfehlen wir die Verwendung von bufio.NewScanner
*/
func main() {
// Dynamisches Array erstellen
arr := make([]string, 0)
scanner := bufio.NewScanner(os.Stdin)
for {
fmt.Print("Text eingeben: ")
// Liest eine Zeile von Stdin(Konsole) ein
scanner.Scan()
// Hält den eingescannten String
text := scanner.Text()
if len(text) != 0 {
fmt.Println(text)
arr = append(arr, text)
} else {
break
}
}
// Verwendet die gesammelten Eingaben
fmt.Println(arr)
}
Wenn Sie die Eingaben nicht programmgesteuert sammeln möchten, fügen Sie einfach diese Zeilen hinzu
scanner := bufio.NewScanner(os.Stdin)
scanner.Scan()
text := scanner.Text()
fmt.Println(text)
Die Ausgabe des obigen Programms wird sein:
Text eingeben: Bob
Bob
Text eingeben: Alice
Alice
Text eingeben:
[Bob Alice]
Das obige Programm sammelt die Benutzereingaben und speichert sie in einem Array. Wir können diesen Ablauf auch mit einem Sonderzeichen unterbrechen. Scanner bietet eine API für erweiterte Verwendung wie das Aufteilen mit einer benutzerdefinierten Funktion, das Scannen verschiedener Arten von I/O-Streams (Standard Stdin
, String
), etc.
Bearbeitung: Der Tweet, der im Originalbeitrag verlinkt ist, ist nicht zugänglich. Man kann aber eine offizielle Referenz zur Verwendung von Scanner aus dieser Standardbibliotheksdokumentation finden: https://pkg.go.dev/bufio@go1.17.6#example-Scanner-Lines