Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Cara menutup saluran di golang

Cara menutup saluran di golang

PHPz
PHPzasal
2023-04-06 08:56:121334semak imbas

Golang, sebagai bahasa pengaturcaraan yang digemari oleh pembangun, juga digunakan secara meluas untuk membina aplikasi berprestasi tinggi dan berskala tinggi. Di Golang, saluran ialah ciri yang sangat penting, sebagai cara untuk memindahkan data antara coroutine Go yang berbeza, merupakan bahagian yang amat diperlukan dalam banyak aplikasi Golang. Pada masa yang sama, menutup saluran juga merupakan operasi yang sangat penting. Mari kita perkenalkan mata pengetahuan yang berkaitan untuk menutup saluran di Golang secara terperinci.

  1. Pengenalan kepada Saluran

Pertama sekali, saluran ialah struktur data selamat jenis, dahulu masuk dahulu keluar (FIFO), yang digunakan sebagai penyegerakan utama di Golang Salah satu mekanisme. Saluran mencapai penyegerakan melalui dua operasi, menghantar dan menerima operasi, serupa dengan paip. Untuk item data tunggal saluran, ia biasanya dipanggil operasi komunikasi (Perintah).

Di Golang, jenis saluran perlu diisytiharkan secara eksplisit sebagai chan, yang boleh diisytiharkan sebagai saluran jenis tertentu. Saluran biasanya dibuat menggunakan fungsi terbina dalam make.

Berikut ialah contoh mudah:

// 创建整型的通道
c := make(chan int)

Dalam kod di atas, kami mencipta saluran integer, dan kemudian kami akan melakukan berbilang operasi pada saluran.

  1. Menutup Saluran

Di Golang, anda boleh menggunakan fungsi terbina dalam close() untuk menutup saluran Fungsi ini adalah untuk menutup saluran. Selepas ditutup Saluran tidak lagi boleh menghantar atau menerima operasi. Data tidak boleh dihantar ke saluran tertutup Data yang belum dibaca dalam saluran tertutup boleh terus dibaca dengan serta-merta akan mengembalikan nilai sifar jenis saluran.

Berikut ialah contoh mudah:

c := make(chan int)

// 向通道发送数据
go func(c chan int) {
    c <- 1
    c <- 2
    c <- 3
    c <- 4
    c <- 5
    close(c)
}(c)

Dalam kod di atas, kami menggunakan kata kunci go untuk membuat coroutine untuk menghantar data ke saluran. Selepas menghantar semua data, kami memanggil fungsi terbina dalam close() untuk menutup saluran.

Sila ambil perhatian bahawa selepas menutup saluran, kami masih boleh membaca data yang belum dibaca daripada saluran yang telah ditutup, tetapi ia akan mengembalikan nilai sifar jenis saluran. Berikut ialah contoh mudah:

c := make(chan int)

go func(c chan int) {
    c <- 1
    close(c)
}(c)

// 从通道中读取数据
fmt.Println(<-c)
fmt.Println(<-c)

Dalam kod di atas, kita membaca nilai dua kali daripada saluran tertutup c. Memandangkan c tidak lagi boleh ditulis selepas menutup saluran, c mengembalikan nilai sifar 0 jenis saluran untuk operasi bacaan kedua.

  1. Menyemak Sama ada Saluran Ditutup

Di Golang, anda boleh menggunakan fungsi terbina dalam closed() untuk menentukan sama ada saluran ditutup. Apabila saluran ditutup, fungsi closed() akan kembali benar, jika tidak ia akan kembali palsu.

Berikut ialah contoh mudah:

//判断通道是否关闭
c := make(chan int)

go func(c chan int) {
    c <- 1
    close(c)
}(c)

if !closed(c) {
    fmt.Println("The channel is still open!")
} else {
    fmt.Println("The channel is already closed!")
}

Dalam kod di atas, kami mencipta coroutine untuk menghantar nilai ke saluran c dan kemudian menutup saluran. Dalam kod berikut, kami menentukan sama ada saluran ditutup dengan memanggil fungsi closed().

  1. Gelung dan baca semua nilai dalam saluran

Selepas saluran ditutup, anda masih boleh membaca nilai yang belum dibaca daripadanya. Apabila membaca data daripada saluran, kita boleh menggunakan gelung for untuk melelaran melalui semua nilai dalam saluran.

Berikut ialah contoh mudah:

//遍历通道中的所有值
c := make(chan int)

go func(c chan int) {
    c <- 1
    c <- 2
    c <- 3
    c <- 4
    c <- 5
    close(c)
}(c)

for v := range c {
    fmt.Println(v)
}

Dalam contoh di atas, kami menghantar nilai integer ​​​​1-5 ke saluran c dalam turutan. Selepas menutup saluran, kami menggunakan gelung for untuk mengulangi semua nilai dalam saluran dan mengeluarkan nilai ini.

Ringkasan

Di Golang, saluran ialah ciri yang sangat berguna, yang sangat praktikal apabila memindahkan data antara coroutine Go yang berbeza. Menutup saluran (Saluran) dan menentukan sama ada saluran ditutup (Saluran Tertutup) juga merupakan operasi yang sangat penting. Di sini, kami bekerja melalui pelbagai contoh, berharap untuk mempunyai pemahaman yang lebih mendalam tentang penggunaan saluran di Golang.

Atas ialah kandungan terperinci Cara menutup saluran di golang. 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