golang full for close chile check go channel

full - Golang: ¿qué es el tamaño del búfer de canal?



golang for range channel (2)

El siguiente código ilustra el bloqueo del canal sin búfer:

// to see the diff, change 0 to 1 c := make(chan struct{}, 0) go func() { time.Sleep(2 * time.Second) <-c }() start := time.Now() c <- struct{}{} // block, if channel size is 0 elapsed := time.Since(start) fmt.Printf("Elapsed: %v/n", elapsed)

Puedes jugar con el código here .

Intento crear un canal asíncrono y he estado viendo http://golang.org/ref/spec#Making_slices_maps_and_channels .

c := make(chan int, 10) // channel with a buffer size of 10

¿Qué significa que el tamaño del buffer es 10? ¿Qué representa específicamente / límite el tamaño del búfer?


El tamaño del búfer es la cantidad de elementos que se pueden enviar al canal sin el bloqueo de envío. Por defecto, un canal tiene un tamaño de búfer de 0 (obtienes esto con make(chan int) ). Esto significa que cada envío se bloqueará hasta que otro administrador reciba el canal. Un canal de tamaño de búfer 1 puede contener 1 elemento hasta enviar bloques, por lo que obtendría

c := make(chan int, 1) c <- 1 // doesn''t block c <- 2 // blocks until another goroutine receives from the channel