Эта часть кода работает правильно, и мой вопрос - почему. Ive узнал, что вы можете отправлять только одно значение в небуферизованный канал до его блокировки. Но в моем коде я пишу ему два раза, но из разных ходовых процедур, и он работает. Был бы признателен, если бы кто-нибудь мог объяснить мне, почему!Запись на тот же канал с несколькими goroutines
func main(){
var ch chan string =make(chan string)
go write(ch)
go write2(ch)
go read(ch)
select{}
}
func write(ch chan string){
for{
ch<-"write1"
}
}
func write2(ch chan string){
for{
ch<-"write2"
}
}
func read(ch chan string){
for{
time.Sleep(time.Second)
select{
case res:= <-ch: fmt.Println(res)
case <-time.After(time.Millisecond*200): fmt.Println("time out")
}
}
}
спасибо. Поэтому, когда «write» записано в ch, «write2» будет ждать/блокировать, пока моя функция «read» не получит значение из «write»? –
Да, точно. Таким образом, каналы могут использоваться для синхронизации выполнения не только для передачи данных. –
Спасибо, друг! Очень ценю, что вы нашли время! –