Rumah > pembangunan bahagian belakang > Golang > Bagaimanakah Saya Boleh Mengesan Kandungan Boleh Dibaca pada STDIN dalam Go Tanpa Menyekat?

Bagaimanakah Saya Boleh Mengesan Kandungan Boleh Dibaca pada STDIN dalam Go Tanpa Menyekat?

Patricia Arquette
Lepaskan: 2024-12-15 21:00:18
asal
276 orang telah melayarinya

How Can I Detect Readable Content on STDIN in Go Without Blocking?

Mengesan Kandungan Boleh Dibaca pada STDIN dalam Go

Andaikan anda mahu alat baris arahan berkelakuan berbeza berdasarkan kehadiran input pada STDIN. Walau bagaimanapun, menggunakan ioutil.ReadAll(os.Stdin) secara langsung boleh membawa kepada tingkah laku yang tidak dijangka.

Khususnya, jika alat dipanggil tanpa sebarang input STDIN, atur cara akan menunggu input selama-lamanya, menghalangnya daripada meneruskan selanjutnya.

Penyelesaian

Untuk menyelesaikan isu ini, anda boleh menggunakan os.Stdin.Stat() untuk menyemak sama ada deskriptor fail STDIN ialah peranti aksara. Coretan kod berikut menunjukkan cara untuk mencapai perkara ini:

package main

import (
    "fmt"
    "os"
)

func main() {
    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")
    }
}
Salin selepas log masuk

Apabila bendera ModeCharDevice dikosongkan untuk fail STDIN, ia menunjukkan bahawa data sedang disalurkan ke STDIN. Jika tidak, ia mencadangkan bahawa STDIN disambungkan ke terminal. Dengan menyemak bendera ini, anda boleh menentukan sama ada terdapat sesuatu untuk dibaca atau tidak pada STDIN tanpa menyekat program.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengesan Kandungan Boleh Dibaca pada STDIN dalam Go Tanpa Menyekat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan