Canales como argumentos

¿Cómo utilizar canales como argumentos de funciones?

Los canales pueden ser enviados a las funciones como argumentos, y estos pueden recibir después mensajes dentro de dichas funciones. Ademas de ser enviados como argumentos, podemos especificar si estos argumentos son de solo lectura, solo escritura, o ambos dependiendo de como se indique en el parámetro.

package main

import "fmt"

func soloLectura(noticias <-chan string) {
    fmt.Println(<-noticias)
}

func soloEscritura(noticias chan<- string) {
    noticias <- "Noticia 2"
}

func lecturaEscritura(noticias chan string) {
    noticias <- "Noticia 3"
    fmt.Println(<-noticias)
}

func main() {
    nts := make(chan string, 2)
    nts <- "Noticia 1"
    soloLectura(nts)
    soloEscritura(nts)
    fmt.Println(<-nts)
    lecturaEscritura(nts)
}

En el ejemplo anterior hemos utilizado un canal como argumento de 3 formas diferentes.

Solo lectura…

soloLectura(noticias <-chan string)

Solo escritura…

soloEscritura(noticias chan<- string)

Ya sea lectura y escritura…

lecturaEscritura(noticias chan string)

El argumento que enviamos es un canal con capacidad de 3.

nts := make(chan string, 2)