如何判斷 Go 中是否透過管道傳輸指令?
在 Go 中處理輸入和輸出時,通常需要確定是否是否正在通過管道傳送命令。管道允許資料透過 Unix 管道從一個進程的輸出傳遞到另一個進程的輸入。
例如:
<code class="sh">cat test.txt | mygocommand # Piped mygocommand # Not piped</code>
這種區別對於自訂應用程式的行為非常重要.
解決方案
解決方案<code class="go">package main import ( "fmt" "os" ) func main() { fi, _ := os.Stdin.Stat() if (fi.Mode() & os.ModeCharDevice) == 0 { fmt.Println("data is from pipe") } else { fmt.Println("data is from terminal") } }</code>
data is from pipe
data is from terminal
解決方案
Go 提供了一種使用os.Stdin.Stat() 檢查stdin 是否透過管道傳輸的方法。這是一個範例:當指令透過管線傳輸時(如第一個範例),輸出將為:否則,它將為: 工作原理os.Stdin.Stat() 函數傳回一個FileInfo 對象,其中包含有關stdin 檔案描述符的資訊。 FileInfo 的 Mode() 方法傳回一個檔案模式,其中包含檔案類型的資訊。如果傳回的模式包含os.ModeCharDevice標誌,則表示該檔案是字元設備,例如終端。如果不是,則表示該文件是普通文件或管道。以上是我的 Go 指令是否從管道接收資料?的詳細內容。更多資訊請關注PHP中文網其他相關文章!