вы пишете / отправляете данные на канал, но не читаете / не получаете данные с того же канала. Запись / чтение в канал блокируется, если вы не читаете / не записываете данные из него.
пишите цикл for, который считывает данные из канала a или использует буферизованный канал
При добавлении некоторых журналов обнаруживаетсявторой случай.
Во втором случае вы создали 10 отдельных подпрограмм go, но все они заблокированы, потому что данные никогда не читаются из канала a, и после 10 итераций выход из цикла for сопровождается основной функцией.
package main
import (
"fmt"
"time"
)
func main(){
var a chan int
a = make(chan int)
for j:=0;j<10;j++{
go firstRoutine(a, j)
fmt.Println("sleeping")
time.Sleep(3 * time.Millisecond)
fmt.Println("awake")
}
}
func firstRoutine(chennel chan int, j int){
i:=0
fmt.Println("j = ", j, "chennel = ", chennel)
chennel <- i
fmt.Println("pushed to channel"); // never gets printed
}
При использовании буферизованного канала:
package main
import (
"fmt"
"time"
)
func main(){
var a chan int
a = make(chan int, 11) // making a buffered channel of 11 elements
for j:=0;j<10;j++{
go firstRoutine(a, j)
fmt.Println("sleeping")
time.Sleep(3 * time.Millisecond)
fmt.Println("awake")
}
}
func firstRoutine(chennel chan int, j int){
i:=0
fmt.Println("j = ", j, "chennel = ", chennel)
chennel <- i
fmt.Println("pushed to channel"); // gets printed as buffer is bigger than the iterations, so no blocking
}