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

Close

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.