Bagaimana untuk Menentukan sama ada Perintah Disambungkan dalam Go?
Apabila bekerja dengan input dan output dalam Go, selalunya perlu untuk menentukan sama ada arahan sedang disalurkan atau tidak. Paip membenarkan data dihantar daripada output satu proses ke input yang lain melalui paip Unix.
Sebagai contoh:
<code class="sh">cat test.txt | mygocommand # Piped mygocommand # Not piped</code>
Perbezaan ini boleh menjadi penting untuk menyesuaikan tingkah laku aplikasi anda .
Penyelesaian
Go menyediakan cara untuk menyemak sama ada stdin adalah disalurkan dengan menggunakan os.Stdin.Stat(). Berikut ialah contoh:
<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>
Apabila arahan disalurkan (seperti dalam contoh pertama), outputnya ialah:
data is from pipe
Jika tidak, ia akan menjadi:
data is from terminal
Cara ia berfungsi
The os.Stdin.Stat() fungsi mengembalikan objek FileInfo yang mengandungi maklumat tentang deskriptor fail stdin. Kaedah Mod() bagi FileInfo mengembalikan mod fail yang merangkumi maklumat tentang jenis fail. Jika mod yang dikembalikan termasuk bendera os.ModeCharDevice, ia menunjukkan bahawa fail itu ialah peranti aksara, seperti terminal. Jika tidak, ini menunjukkan bahawa fail itu ialah fail biasa atau paip.
Atas ialah kandungan terperinci Adakah Perintah My Go Menerima Data daripada Paip?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!