Junior — Middle
Goroutine kullanmadan kanallarla çalışma yöntemlerine örnek verebilir misiniz?
sobes.tech yapay zeka
AI'dan gelen yanıt
Go'da kanallar genellikle goroutine'ler arasındaki iletişim için kullanılır, ancak ek goroutine'ler başlatmadan da kullanılabilirler, örneğin, senkron veri iletimi için.
Örnek:
package main
import "fmt"
func main() {
ch := make(chan int)
// Tek bir akışta gönderme ve alma (goroutine olmadan)
go func() {
ch <- 42
}()
val := <-ch
fmt.Println(val)
}
Ancak, bu örnekte gönderim için bir goroutine kullanılır, böylece blokaj önlenir. Eğer hiç goroutine kullanılmazsa, gönderim ve alma sıralı olmalıdır, örneğin:
package main
import "fmt"
func main() {
ch := make(chan int, 1) // Bufferli kanal
ch <- 10 // Bufferli kanala gönderim
val := <-ch // Kanaldan alma
fmt.Println(val)
}
Burada, bufferli kanal, bloklamadan değer göndermeye izin verir, çünkü bufferde yer vardır. Bu nedenle, bufferli kanallar ve sıralı gönderim/alma kullanılarak goroutine olmadan kanallarla çalışma yöntemleri mümkündür.