#go
#Вперед
Вопрос:
На мой взгляд, «выбрать … регистр» означает «Если доступен какой-либо канал, он выполняется».Итак, почему здесь ошибка, я думаю message<-msg
, что доступна отправка chan, но это вызывает тупик!. большое спасибо.
import "fmt"
func main() {
messages:=make(chan string)
//signals:=make(chan string)
select {
case msg:=<-messages:
fmt.Println(msg)
default:
fmt.Println("no mes receivedd")
}
msg:="h1"
select {
case messages<-msg:
fmt.Println("sent message",msg)
}
}
Ответ №1:
У первого выбора есть default
случай, поэтому он выбрал это немедленно. Второй select пытается выполнить запись messages
, но другие программы не прослушиваются, поэтому у вас тупик.
Переместите второй select перед первым, поместите его в программу и удалите default
регистр, тогда у вас будет успешная отправка / получение.
Комментарии:
1. спасибо, у меня есть успешное обучение отправке и получению вами, но зачем мне нужно поместить второй выбор в программу ? Я пробую это, но это все еще тупик
package main import "fmt" func main() { messages:=make(chan string) //signals:=make(chan string) msg:="h1" select { case messages<-msg: fmt.Println("sent message",msg) } select { case msg:=<-messages: fmt.Println(msg) default: fmt.Println("no mes receivedd") } }
Ответ №2:
источник geeksforgeeks
Здесь у нас есть карта двух программ с двумя функциями. одна карта программы с функцией main и одна с анонимной функцией.
package main
import (
"fmt"
)
func main() {
messages := make(chan string)
//signals:=make(chan string)
msg := "h1"
go func(msg string) {
select {
case messages <- msg:
fmt.Println("sent message", msg)
}
}(msg)
select {
case msg := <-messages:
fmt.Println("Message recieved", msg)
}
}