首頁 > 後端開發 > Golang > 我的 Go 指令是否從管道接收資料?

我的 Go 指令是否從管道接收資料?

Mary-Kate Olsen
發布: 2024-11-05 03:27:02
原創
715 人瀏覽過

Is My Go Command Receiving Data from a Pipe?

如何判斷 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中文網其他相關文章!

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