首頁 >後端開發 >Golang >如何在 Golang 中檢查 STDIN 上的可用輸入?

如何在 Golang 中檢查 STDIN 上的可用輸入?

DDD
DDD原創
2024-12-18 20:06:11621瀏覽

How Can I Check for Available Input on STDIN in Golang?

在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中文網其他相關文章!

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