Channel kapatma
- Go kursu
- Orta seviye
- Ders 17/80
- 4 dk
close ile channel'ı kapatmayı ve algılamayı öğrenirsin.
Channel kapatma
close(ch) ile bir channel'ı kapatırsın. Kapalı channel'a gönderme panic verir; kapalı channel'dan alma sıfır değer döndürür. Bu, veri akışının bittiğini bildirmenin yoludur.
v, ok := <-ch ile channel'ın açık/kapalı durumunu öğrenirsin. ok false ise channel kapatılmış ve boşalmıştır. for v := range ch döngüsü channel kapandığında otomatik biter.
close ve range
Bir channel'ı kapatmak for v := range ch ile birlikte kullanılır. Gönderen tüm veriyi gönderdikten sonra close(ch) yapar; alan range döngüsü otomatik biter.
Kanalı her zaman gönderen kapatmalıdır; alıcı kapatırsa gönderen panic alabilir. Bu ilkeyi uygulamak güvenli concurrency için önemlidir.
Uygulama Channel kapat ve yazdır
main içine bir make(chan string) çağrısı ve fmt.Println ile kapatıldı yazdır.
Başlangıç kodu
package main
import "fmt"
func main() {
// buraya yaz
}Örnek çözüm
package main
import "fmt"
func main() {
ch := make(chan string, 1)
ch <- "kapatıldı"
close(ch)
fmt.Println(<-ch)
}Beklenen çıktı
kapatıldı
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Kapalı channel'a gönderme ne yapar?
- Sessizce yok sayılır
- Panik verir Doğru cevap
- Bloklanır
- Sıfır değer döner
Açıklama: panik verir. Kapalı channel'dan ALMA sıfır değer döndürür.
2 Channel kapatma
ch := make(chan int, 2)
ch <- 1
ch <- 2
____
for v := range ch {
fmt.Println(v)
}
ch := make(chan int, 2)
ch <- 1
ch <- 2
close(ch)
for v := range ch {
fmt.Println(v)
}
Açıklama: Go'da close bir fonksiyondur, metod değil.
3 close kavramlarını eşleştir
| Kavram | Anlamı |
|---|---|
close(ch) |
Kapatma |
v, ok |
Durum |
range |
Otomatik bitme |
panic |
Kapalıya gönderme |