首頁 > 後端開發 > Golang > 如何在 Go 中偵測 STDIN 上的可讀內容而不阻塞?

如何在 Go 中偵測 STDIN 上的可讀內容而不阻塞?

Patricia Arquette
發布: 2024-12-15 21:00:18
原創
277 人瀏覽過

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

在 Go 中偵測 STDIN 上的可讀內容

假設您希望命令列工具根據 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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板