„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wie kann ich in Stdin nach Daten suchen, ohne sie in Go zu blockieren?

Wie kann ich in Stdin nach Daten suchen, ohne sie in Go zu blockieren?

Veröffentlicht am 19.11.2024
Durchsuche:243

How to Check for Data in Stdin without Blocking in Go?

Überprüfen von Daten in Stdin mit Go

In Go ist die Interaktion mit der Standardeingabe (stdin) oft eine entscheidende Aufgabe bei der Arbeit mit Befehlen und Pipelines. Allerdings kann es eine Herausforderung sein, festzustellen, ob stdin über Daten verfügt, ohne die Ausführung des Programms zu blockieren.

Das Dateiobjekt os.Stdin stellt stdin dar und verfügt über ähnliche Funktionen wie andere Dateiobjekte in Go. Dadurch können wir die Stat-Funktion nutzen, um Informationen über stdin, einschließlich seiner Größe, zu sammeln.

Um festzustellen, ob stdin Daten enthält, können wir seine Größe mit dem folgenden Code überprüfen:

func main() {
    file := os.Stdin
    fi, err := file.Stat()
    if err != nil {
        fmt.Println("file.Stat()", err)
    }
    size := fi.Size()
    if size > 0 {
        fmt.Printf("%v bytes available in Stdin\n", size)
    } else {
        fmt.Println("Stdin is empty")
    }
}

Wenn dieser Code in eine ausführbare Datei kompiliert wird, kann er als Filter zum Verarbeiten von Eingaben verwendet werden, die an stdin weitergeleitet werden. Führen Sie beispielsweise den Befehl echo test | aus ./executable würde „5 Bytes verfügbar in Stdin“ auf der Konsole ausgeben, was darauf hinweist, dass Stdin Daten enthält. Umgekehrt würde beim Ausführen von ./executable ohne Eingabe „Stdin ist leer“ angezeigt.

Dieser Ansatz ermöglicht es Entwicklern, ohne Blockierung nach Daten in stdin zu suchen und mit der Logik ihres Programms entsprechend fortzufahren. Dies ist besonders nützlich, wenn Sie mit Pipelines arbeiten oder Benutzereingaben von stdin verarbeiten.

Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3