Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Saya Boleh Mengesan jika STDIN Mengandungi Data 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!