Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Golang menentukan bahawa chan ditutup

Golang menentukan bahawa chan ditutup

WBOY
WBOYasal
2023-05-10 15:55:072147semak imbas

Apabila belajar dan menggunakan golang, kita sering menghadapi situasi di mana kita perlu menggunakan chan untuk melaksanakan coroutine concurrency. Walau bagaimanapun, dalam penggunaan sebenar, kadangkala kita perlu menentukan sama ada chan telah ditutup. Artikel ini memperkenalkan beberapa kaedah Golang untuk menentukan sama ada chan telah ditutup.

Pertama sekali, adalah sangat penting untuk memahami penggunaan asas dan ciri-ciri chan dalam golang. Chan in golang ialah mekanisme kawalan serentak berdasarkan model CSP, yang boleh merealisasikan komunikasi dan penyegerakan antara coroutine. Kaedah komunikasi Chan menyekat Apabila operasi baca atau tulis tidak dapat diselesaikan, coroutine akan disekat sehingga data boleh dibaca atau ruang kosong boleh ditulis. Ciri chan ialah apabila chan telah ditutup, operasi membaca dan menulis semula akan menyebabkan panik. Oleh itu, cara untuk menentukan sama ada chan telah ditutup menjadi sangat penting.

Berikut ialah beberapa kaedah untuk Golang untuk menentukan sama ada chan ditutup:

Kaedah 1: Tambah isyarat

Kita boleh menilai dengan menambahkan isyarat pada pembolehubah chan. Sama ada chan ditutup. Apabila chan ditutup, kita boleh memberitahu coroutine lain bahawa chan telah ditutup dengan menutup isyarat.

Kod sampel adalah seperti berikut:

package main

import "fmt"

func main() {
    a := make(chan int)
    quit := make(chan bool)

    go func() {
        for {
            select {
            case x := <-a:
                fmt.Println(x)
            case <-quit:
                fmt.Println("chan closed")
                return
            }
        }
    }()

    for i := 0; i < 5; i++ {
        a <- i
    }
    close(a)
    quit <- true

    fmt.Println("done")
}

Dalam kod di atas, kami mencipta chan jenis int bernama a dan chan jenis bool bernama quit. Dalam coroutine, pilih memantau operasi baca a dan operasi penutupan isyarat apabila chan ditutup, coroutine dimaklumkan oleh isyarat berhenti. Dalam coroutine utama, kami memasukkan 5 data kepada a, kemudian menutup a melalui fungsi close() dan memberitahu penghujung coroutine melalui isyarat berhenti. Akhirnya, done dicetak untuk menunjukkan bahawa pelaksanaan program telah selesai.

Kaedah 2: Gunakan fungsi julat

Kita juga boleh menggunakan fungsi julat untuk menentukan sama ada chan telah ditutup. Apabila chan ditutup, fungsi julat akan tamat. Berikut ialah contoh kod:

package main

import "fmt"

func main() {
    a := make(chan int)

    go func() {
        for x := range a {
            fmt.Println(x)
        }
        fmt.Println("chan closed")
    }()

    for i := 0; i < 5; i++ {
        a <- i
    }
    close(a)

    fmt.Println("done")
}

Dalam kod di atas, kami mula-mula mencipta chan jenis int bernama a. Dalam coroutine, data dalam chan dilalui melalui fungsi julat Apabila chan ditutup, fungsi julat akan menamatkan coroutine dan mencetak "chan ditutup" untuk menunjukkan bahawa chan telah ditutup. Dalam coroutine utama, kami memasukkan 5 data ke a, dan kemudian menutup a melalui fungsi close(). Akhirnya, done dicetak untuk menunjukkan bahawa pelaksanaan program telah selesai.

Kaedah 3: Gunakan pembolehubah ok

Cara lain untuk menentukan sama ada chan telah ditutup adalah dengan menggunakan pembolehubah ok. Apabila saluran ditutup, pembolehubah ok akan menjadi palsu.

Kod sampel adalah seperti berikut:

package main

import "fmt"

func main() {
    a := make(chan int)

    go func() {
        for {
            x, ok := <-a
            if !ok {
                fmt.Println("chan closed")
                break
            }
            fmt.Println(x)
        }
    }()

    for i := 0; i < 5; i++ {
        a <- i
    }
    close(a)

    fmt.Println("done")
}

Dalam kod di atas, kami mencipta chan jenis int bernama a. Dalam coroutine, kami melintasi data dalam chan melalui gelung for Jika pembolehubah ok menjadi palsu, ini bermakna chan telah ditutup dan gelung berakhir. Dalam coroutine utama, kami memasukkan 5 data ke a, dan kemudian menutup a melalui fungsi close(). Akhirnya, done dicetak untuk menunjukkan bahawa pelaksanaan program telah selesai.

Tiga kaedah di atas semuanya boleh menentukan sama ada chan dalam golang ditutup Anda boleh memilih kaedah yang sesuai mengikut keperluan peribadi anda. Menentukan sama ada chan ditutup adalah titik pengetahuan penting yang digunakan dalam golang. Saya harap ia akan membantu pembelajaran semua orang.

Atas ialah kandungan terperinci Golang menentukan bahawa chan ditutup. 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