Junior — Middle
Kanalden okuma işlemi tampon kullanmadan mümkün mü?
sobes.tech yapay zeka
AI'dan gelen yanıt
Go'da, buffer olmayan (chan) kanal okuma işlemi yalnızca kanal tamponluysa mümkündür. Kanal tamponu yoksa (boyut 0), okuma işlemi, kanala bir değer gönderilene kadar engellenir.
Dolayısıyla:
- Buffer olmayan, bloklamayan okuma için, kanal ile bloklamayan işlemler kullanılmalıdır (örneğin,
selectiledefaultkullanarak), ancak bu, veri alımını garanti etmez. - Buffer olmayan kanalda, okuma her zaman engellenir, ta ki biri veri gönderene kadar.
Bufferli kanal örneği:
ch := make(chan int, 1) // 1 öğe tamponu
ch <- 42 // değer gönder
val := <-ch // bloklamadan okuma
Buffer olmayan kanalda, okuma ve yazma doğrudan goroutine'ler arasında senkronize olur.