Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Saya Boleh Mengesan jika STDIN Mengandungi Data dalam Go?

Bagaimanakah Saya Boleh Mengesan jika STDIN Mengandungi Data dalam Go?

Barbara Streisand
Barbara Streisandasal
2024-12-10 12:32:15221semak imbas

How Can I Detect if STDIN Contains Data in Go?

Menyemak Input pada STDIN dalam Go

Coretan kod ini menangani isu menyemak input pada input standard (STDIN) menggunakan bahasa Go. Khususnya, pengguna menghadapi situasi di mana utiliti baris perintah mereka perlu berkelakuan secara berbeza berdasarkan kehadiran rentetan yang disalurkan ke STDIN.

Kod contoh yang disediakan menggunakan ioutil.ReadAll(os.Stdin) berfungsi untuk membaca semua bait daripada STDIN. Jika panjang tatasusunan bait lebih besar daripada sifar, kod tersebut mencetak mesej yang sesuai yang menunjukkan bahawa sesuatu tersedia pada STDIN. Walau bagaimanapun, apabila tiada apa-apa pada STDIN, kod boleh tersekat menunggu penanda akhir fail (EOF).

Untuk menyelesaikan isu ini, kod tersebut memanfaatkan bendera os.ModeCharDevice untuk menentukan sama ada STDIN datang dari terminal atau paip. Jika bendera os.ModeCharDevice tidak ditetapkan, ia menunjukkan bahawa data sedang disalurkan ke STDIN, dan kod tersebut mencetak mesej dengan sewajarnya. Jika tidak, ia mengandaikan bahawa STDIN datang daripada terminal.

Berikut ialah coretan kod yang diubah suai yang menggabungkan semakan os.ModeCharDevice:

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")
}

Kod ini dengan berkesan membenarkan utiliti baris perintah untuk membezakan antara input berpaip dan input terminal langsung, membolehkannya berkelakuan sewajarnya.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengesan jika STDIN Mengandungi Data dalam Go?. 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