假設您希望命令列工具根據 STDIN 上是否存在輸入來表現不同的行為。但是,直接使用 ioutil.ReadAll(os.Stdin) 可能會導致意外行為。
特別是,如果在沒有任何STDIN 輸入的情況下調用該工具,程式將無限期地等待輸入,從而阻止其繼續進行
要要解決這個問題,您可以使用os.Stdin.Stat() 來檢查STDIN檔案描述符是一個字元裝置。以下程式碼片段示範如何實現此目的:
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") } }
當 STDIN 檔案的 ModeCharDevice 標誌清除時,表示資料正在透過管道傳送到 STDIN。否則,表示 STDIN 已連接到終端。檢查此標誌,您可以確定 STDIN 上是否有內容需要讀取,而不會阻塞程式。
以上是如何在 Go 中偵測 STDIN 上的可讀內容而不阻塞?的詳細內容。更多資訊請關注PHP中文網其他相關文章!