Rumah >pembangunan bahagian belakang >Golang >Adakah Perintah My Go Menerima Data daripada Paip?

Adakah Perintah My Go Menerima Data daripada Paip?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-05 03:27:02759semak imbas

Is My Go Command Receiving Data from a Pipe?

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn