Compreendendo <- <-in

Para os recém-chegados a Golang (como eu), a visão c <- <-chanpode ser bastante confusa. Não é que os canais em si sejam confusos, mas o aparentemente duplicado <-é enganoso. Então, dividi um pouco e é realmente simples. Veja este exemplo em uma função simples de ventilação de canal.

func fanIn(input1, input2 <-chan string) <-chan string {
c
:= make(chan string)
// This looks confusing, but is actually simple.
// This is easier to digest if we read from right to left.
// On the right hand side we have a channel (input1).
// When that channel gets data (<-input1), pass that data
// to the new channel (c <-). So at run time we essentially have
// c <- "my value"
go func
() {
for {
c
<- <-input1
}
}()
go func
() {
for {
c
<- <-input2
}
}()

return c
}

Leia mais sobre simultaneidade aqui- http://blog.golang.org/pipelines