CodeBlanks Logo Icon CodeBlanks

Channel kapatma

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

main.go
package main

import "fmt"

func main() {
    // buraya yaz
}

Örnek çözüm

main.go
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

Soru
ch := make(chan int, 2)
ch <- 1
ch <- 2
____
for v := range ch {
    fmt.Println(v)
}
Cevap
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

Orta seviye bölümündeki tüm dersler