Heim > Backend-Entwicklung > Golang > Wie kann ich lesbare Inhalte auf STDIN in Go ohne Blockierung erkennen?

Wie kann ich lesbare Inhalte auf STDIN in Go ohne Blockierung erkennen?

Patricia Arquette
Freigeben: 2024-12-15 21:00:18
Original
277 Leute haben es durchsucht

How Can I Detect Readable Content on STDIN in Go Without Blocking?

Erkennen lesbarer Inhalte auf STDIN in Go

Angenommen, Sie möchten, dass sich ein Befehlszeilentool je nach vorhandener Eingabe auf STDIN unterschiedlich verhält. Die direkte Verwendung von ioutil.ReadAll(os.Stdin) kann jedoch zu unerwartetem Verhalten führen.

Insbesondere wenn das Tool ohne STDIN-Eingabe aufgerufen wird, wartet das Programm unbegrenzt auf eine Eingabe und verhindert so, dass es fortfahren kann weiter.

Lösung

Um dieses Problem zu lösen, können Sie os.Stdin.Stat() verwenden, um zu überprüfen, ob die STDIN-Datei Deskriptor ist ein Zeichengerät. Der folgende Codeausschnitt zeigt, wie dies erreicht wird:

package main

import (
    "fmt"
    "os"
)

func main() {
    stat, _ := os.Stdin.Stat()
    if (stat.Mode() & os.ModeCharDevice) == 0 {
        fmt.Println("data is being piped to stdin")
    } else {
        fmt.Println("stdin is from a terminal")
    }
}
Nach dem Login kopieren

Wenn das ModeCharDevice-Flag für die STDIN-Datei gelöscht wird, bedeutet dies, dass Daten an die STDIN weitergeleitet werden. Andernfalls deutet es darauf hin, dass STDIN mit einem Terminal verbunden ist. Indem Sie dieses Flag überprüfen, können Sie feststellen, ob auf STDIN etwas zu lesen ist, ohne das Programm zu blockieren.

Das obige ist der detaillierte Inhalt vonWie kann ich lesbare Inhalte auf STDIN in Go ohne Blockierung erkennen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage