在Golang 中檢查STDIN 上的可用輸入
在某些命令列場景中,了解stdin 上是否存在輸入對於自訂行為至關重要。考慮以下範例:
package main import ( "fmt" "io/ioutil" "os" ) func main() { bytes, _ := ioutil.ReadAll(os.Stdin) if len(bytes) > 0 { fmt.Println("Something on STDIN: " + string(bytes)) } else { fmt.Println("Nothing on STDIN") } }
雖然此程式碼適用於管道輸入,但當不存在輸入時,它會在 ioutil.ReadAll(os.Stdin) 處停止。本文解決了這個問題,提供了一個解決方案來確定 stdin 資料的可用性。
解決方案:檢查檔案模式
解決方案在於檢查標準輸入流。當stdin是常規檔案(例如終端)時,其模式包括os.ModeCharDevice,指示字元設備狀態。相反,如果輸入是透過管道傳輸的,則該模式缺少此標誌。以下程式碼示範了這種方法:
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 輸入,從而允許進行適當的行為調整。
以上是如何在 Golang 中檢查 STDIN 上的可用輸入?的詳細內容。更多資訊請關注PHP中文網其他相關文章!