I/O yang tidak menyekat dalam bahasa Go boleh dicapai dengan menggunakan paip: Cipta paip yang tidak terbuffer: make(chan int) Hantar data ke paip: ch <- 1 Terima data daripada paip: val := < -ch Kes praktikal : Buat program membaca fail tanpa sekat
Paip ialah cara yang cekap untuk berkomunikasi dalam program Go serentak. Mereka membenarkan kod berasaskan acara, di mana setiap peringkat berjalan secara bebas manakala data mengalir secara tidak segerak melalui saluran paip. Artikel ini akan menunjukkan cara menggunakan paip untuk melaksanakan I/O tanpa sekatan dalam bahasa Go.
Membuat paip adalah sangat mudah: jenis paip tanpa penimbal
package main import "fmt" func main() { ch := make(chan int) }
make(chan int)
创建一个可以容纳 int
. Tanpa penimbal bermakna data dipindahkan dari satu coroutine ke coroutine yang lain serta-merta, yang penting untuk aplikasi I/O berprestasi tinggi.
Hantar data ke paip:
ch <- 1
Terima data daripada paip:
val := <-ch
Mari buat program membaca fail tanpa menyekat. Andaikan kandungan fail ialah:
Hello World
package main import ( "fmt" "bufio" "os" ) func main() { ch := make(chan string) file, err := os.Open("file.txt") if err != nil { fmt.Println(err) return } defer file.Close() go func() { scanner := bufio.NewScanner(file) for scanner.Scan() { ch <- scanner.Text() } ch <- "" // 标记文件读完 }() // 从管道中以非阻塞方式读取行 for { line := <-ch if line == "" { break } fmt.Println(line) } }
Atur cara mencipta paip untuk memindahkan baris fail. Coroutine bertanggungjawab untuk membaca dari fail dan menghantar talian ke paip. Coroutine utama kemudiannya menerima talian daripada paip, dan memandangkan paip tidak menyekat, ia boleh terus melaksanakan tugas lain walaupun bacaan fail tidak lengkap.
Apabila bacaan fail selesai, hantar baris kosong untuk memberitahu coroutine utama untuk keluar dari gelung.
Atas ialah kandungan terperinci Bagaimana untuk menggunakan paip dalam Go untuk I/O tidak menyekat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!