首頁 >後端開發 >Golang >Go中如何偵測STDIN是否包含資料?

Go中如何偵測STDIN是否包含資料?

Barbara Streisand
Barbara Streisand原創
2024-12-10 12:32:15276瀏覽

How Can I Detect if STDIN Contains Data in Go?

在 Go 中檢查 STDIN 上的輸入

此程式碼片段解決了使用 Go 語言檢查標準輸入 (STDIN) 上的輸入的問題。特別是,使用者遇到這樣的情況:他們的命令列實用程式需要根據透過管道傳輸到 STDIN 的字串的存在而採取不同的行為。

提供的範例程式碼使用 ioutil.ReadAll(os.Stdin)函數從 STDIN 讀取所有位元組。如果位元組數組的長度大於零,代碼將列印一條適當的訊息,指示 STDIN 上有可用的內容。但是,當 STDIN 上沒有任何內容時,代碼可能會陷入等待文件結束 (EOF) 標記的狀態。

為了解決此問題,程式碼利用 os.ModeCharDevice 標誌來確定 STDIN 是否存在來自終端或管道。如果未設定 os.ModeCharDevice 標誌,則表示資料正在透過管道傳輸到 STDIN,且程式碼會相應地列印一則訊息。否則,它假設 STDIN 來自終端機。

這是合併了os.ModeCharDevice 檢查的修改後的程式碼片段:

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")
}

此程式碼有效地允許命令列實用程式區分在管道輸入和直接終端輸入之間,使其能夠相應地運行。

以上是Go中如何偵測STDIN是否包含資料?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn