Middle
Go'da yopilgan kanal bilan nima qilish mumkin?
sobes.tech AI
AIdan javob
Yopiq kanaldan o'qish paytida, yopilishidan oldin yozilgan qolgan barcha ma'lumotlarni olishingiz mumkin. Kanal tozalangandan so'ng, keyingi o'qish operatsiyalari kanal elementining tipida null qiymat va ikkinchi qiymat sifatida false ni qaytaradi, bu kanal yopilganligini ko'rsatadi.
Yopiq kanaldan ma'lumot yuborish ish vaqtida panikaga olib keladi.
Allaqachon yopilgan kanalni yopishga urinish ham ish vaqtida panikaga olib keladi.
Kanal yopilganligini tekshirish uchun ok operatoridan foydalanishingiz mumkin:
package main
import (
"fmt"
)
func main() {
ch := make(chan int, 2)
ch <- 1
ch <- 2
close(ch)
// Kanal yopilganidan so'ng tozalash uchun o'qish
val1, ok1 := <-ch
fmt.Printf("Qiymat: %d, Ok: %t\n", val1, ok1) // Qiymat: 1, Ok: true
val2, ok2 := <-ch
fmt.Printf("Qiymat: %d, Ok: %t\n", val2, ok2) // Qiymat: 2, Ok: true
// Kanal tozalangandan so'ng o'qish
val3, ok3 := <-ch
fmt.Printf("Qiymat: %d, Ok: %t\n", val3, ok3) // Qiymat: 0, Ok: false
// Yopilgan kanaldan ma'lumot yuborishga urinish (panic keltirib chiqaradi)
// ch <- 3 // Bu satrni izohga oling, panic yuzaga keladi
// Allaqachon yopilgan kanaldan yopishga urinish (panic keltirib chiqaradi)
// close(ch) // Bu satrni izohga oling, panic yuzaga keladi
}
range bilan yopilgan kanalni ishlatish, kanal tozalangandan keyin ma'lumotlarni ketma-ket o'qishga imkon beradi va sikl avtomatik ravishda tugaydi.
package main
import (
"fmt"
)
func main() {
ch := make(chan int, 3)
ch <- 10
ch <- 20
close(ch)
// Yopilgan kanal bilan range ishlatish
for val := range ch {
fmt.Println(val) // 10 va 20 ni chiqaradi
}
}