Канал нулевого размера небуферизован. Это означает, что каждая отправка будет блокироваться до тех пор, пока другая программа не получит от канала. Этот пример будет работать:
package main
import (
"fmt"
"time"
)
func main() {
ch := make(chan int, 0)
go func() {
for c := range ch {
fmt.Println(c)
}
}()
ch <- 1
ch <- 2
time.Sleep(time.Minute)
}