Para ver los Range, Close y Select, vamos a crear un channel
, con un manejo de dos datos.
c := make(chan string, 2)
Añadimos al canal dos valores de string
.
c <- "Mensaje1"
c <- "Mensaje2"
Y ponemos a imprimir lo siguiente:
fmt.Println(len(c), cap(c))
Código resultante:
package main
import "fmt"
func main() {
c := make(chan string, 2)
c <- "Mensaje1"
c <- "Mensaje2"
fmt.Println(len(c), cap(c))
}
Resultado:
2 2
len(c)
nos indica cuántas goroutines
hay dentro del channel c
, y el cap(c)
nos indica la capacidad máxima que puede almacenar el channel c
.
Comentando línea de código para ver su resultado.
package main
import "fmt"
func main() {
c := make(chan string, 2)
c <- "Mensaje1"
//c <- "Mensaje2"
fmt.Println(len(c), cap(c))
}
Resultado:
1 2
Si quisiéramos cerrar un channel, lo haríamos con close(c)
, esto hace que el channel se cierre así tenga capacidad para otro tipo de dato.
El siguiente código presenta error porque estamos agregando un dato después de cerrar el channel, así tenga capacidad para uno más.